Este repositório FoodFusion é destinado ao projeto de Fast Food da FIAP, criado como parte de um desafio técnico.
O projeto de Fast Food da FIAP tem como objetivo criar um sistema de autoatendimento para uma lanchonete, visando melhorar a eficiência no atendimento aos clientes e garantir a precisão na preparação dos pedidos.
Para rodar a aplicação, é necessário ter as seguintes ferramentas instaladas:
- Docker
- Kubernetes
- K6 (para testes de estresse)
-
Configuração do Ambiente:
Certifique-se de ter o Docker e o Kubernetes configurados corretamente na sua máquina.
-
Build da Imagem Docker:
Execute o seguinte comando para construir a imagem Docker da aplicação:
docker build . -t tech-challenge-go -f Dockerfile
-
Deploy com Kubernetes:
Aplique os recursos do Kubernetes utilizando o seguinte comando:
kubectl apply -f infra/
-
Verificação do Status dos Pods:
Aguarde até que todos os pods estejam rodando com o comando:
kubectl get pods --watch
-
Pronto.
Para apagar todos os recursos criados, utilize o comando:
kubectl delete -f infra/
Para realizar testes de estresse, certifique-se de ter o K6 instalado na sua máquina e execute o seguinte comando:
k6 run --duration 1m tests/stress.js
Ao importar a documentação presente em docs/tech-challenge.json
de cada repositório, no Postman, terão valores de exemplos editáveis.
Para visualizar e editar o storytelling da aplicação, acesse Egon.io e importe os arquivos .dst
localizados em docs/domain_storytelling
.
É possível acessar o relatório RIPD atrávés do link.
Esta imagem ilustra a arquitetura do sistema. Como se trata de um projeto pequeno, com apenas um evento, optou-se por adotar o padrão SAGA baseado em coreografia. Nesse modelo, o próprio serviço que inicia o evento – neste caso, o payment-service – é responsável por conduzir o fluxo. Escolhemos a SAGA coreografada por sua agilidade em adaptar-se a mudanças nos requisitos de negócios e pela descentralização dos serviços, permitindo que cada um defina suas próprias regras de negócio. Além disso, a ausência de um componente central (orquestrador) elimina a dependência de um único ponto de falha, aumentando a resiliência do sistema.
Através da imagem podemos observar o comportamento da SAGA entre os serviços durante a realização do pagamento de um pedido realizado pelo cliente.
Esta imagem representa o processo de pedido do cliente usando o sistema de autoatendimento de fast food. Os clientes podem selecionar seus itens preferidos e personalizar seus pedidos de acordo com suas preferências.
Esta imagem representa o processo de preparo e entrega dos pedidos na cozinha da lanchonete. O sistema de autoatendimento de fast food transmite os pedidos automaticamente para a cozinha, após pagamento, onde são preparados e entregues aos clientes de forma eficiente e organizada.
É possível ver pelo vídeo através do link o projeto rodando, inclusive com o padrão SAGA funcionando. Este projeto foi desenvolvido para gerenciar pedidos e pagamentos de um restaurante de forma eficiente e escalável. Explicando sobre o uso do padrão SAGA escolhido e sua justificativa, além de como a estrutura foi montada e como a comunicação está montada.
- Iniciar a aplicação, conforme presente nessa documentação.
- Se desejo criar um cliente, utilize o endpoint
POST /customers
e guarde o valor do customerId. - Caso deseje utilizar um cliente já existente, pesquise o customerId através do endpoint
GET /customers?cpf=CPF_DO_CLIENTE
, informando o CPF do cliente. - Liste as categorias de produtos utilizando o endpoint
GET /products/categories
para obter a categoryId, a ser utilizada na criação de produto. - Crie um ou mais produtos através dos endpoints de
POST /products
. - Para alterar um produto, utilize o endpoint
PATCH /products/:productId
. - Para apagar um produto, utilize o endpoint
DELETE /products/:productId
. - Liste os produtos criados através de
GET /products
para buscar os productId dos produtos que serão utilizados para criar um pedido. - Crie um pedido, informando os productId dos produtos desejados, quantidade e observação (opcional), através do endpoint
POST /order
. - Após criar o pedido, realize o pagamento por QR Code utilizando o endpoint
GET /payments/qr-code
. - Para simular o pagamento em ambiente de teste, chame o endpoint de Webhook do Mercado Pago através de
POST /payments
. Assim, o pedido estará pago e recebido na cozinha. - Utilize o endpoint
GET /orders
para listar os pedidos, que podem estar prontos, em preparação ou recebidos (e pagos). - Quando um pedido precisar mudar de status, utilize o endpoint
PATCH /orders/:orderId
para alterar o status, de 'recebido' para 'em preparação', de 'em preparação' para 'pronto', e de 'pronto' para 'finalizado' (quando o cliente retirar o seu pedido).
Certifique-se de configurar corretamente as variáveis de ambiente e arquivos de configuração antes de rodar a aplicação.
Nesses relatórios constam todos os registros de tentativas nos endpoints e também vulnerabilidades encontradas e quais foram tratadas
Este projeto está licenciado sob a Licença MIT.