Skip to content
@Food-fusion-Fiap

Food fusion Fiap

FoodFusion - Fast Food FIAP - Tech Challenge

Este repositório FoodFusion é destinado ao projeto de Fast Food da FIAP, criado como parte de um desafio técnico.

Objetivo do Projeto

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.

Requisitos do Sistema

Para rodar a aplicação, é necessário ter as seguintes ferramentas instaladas:

  • Docker
  • Kubernetes
  • K6 (para testes de estresse)

Instruções para Rodar a Aplicação

  1. Configuração do Ambiente:

    Certifique-se de ter o Docker e o Kubernetes configurados corretamente na sua máquina.

  2. Build da Imagem Docker:

    Execute o seguinte comando para construir a imagem Docker da aplicação:

    docker build . -t tech-challenge-go -f Dockerfile
  3. Deploy com Kubernetes:

    Aplique os recursos do Kubernetes utilizando o seguinte comando:

    kubectl apply -f infra/
  4. Verificação do Status dos Pods:

    Aguarde até que todos os pods estejam rodando com o comando:

    kubectl get pods --watch
  5. Pronto.

Remoção de Recursos

Para apagar todos os recursos criados, utilize o comando:

kubectl delete -f infra/

Testes de estresse

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

Documentação da API

Ao importar a documentação presente em docs/tech-challenge.json de cada repositório, no Postman, terão valores de exemplos editáveis.

Documentação do problema

Para visualizar e editar o storytelling da aplicação, acesse Egon.io e importe os arquivos .dst localizados em docs/domain_storytelling.

Relatório RIPD do sistema

É possível acessar o relatório RIPD atrávés do link.

Arquitetura do projeto

Arquitetura do projeto

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.

Fluxograma da SAGA

Fluxograma da SAGA

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.

Pedido do Cliente

Pedido do 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.

Preparo e Entrega

Preparo e Entrega

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.

Explicação por vídeo

É 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.

Ordem de execução da API:

  • 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).

Pontos Importantes

Certifique-se de configurar corretamente as variáveis de ambiente e arquivos de configuração antes de rodar a aplicação.

Reports de vulnerabilidades

Antes de executa o ZAP

Depois de executa o ZAP

Nesses relatórios constam todos os registros de tentativas nos endpoints e também vulnerabilidades encontradas e quais foram tratadas

Licença

Este projeto está licenciado sob a Licença MIT.

Referências

Popular repositories Loading

  1. tech-challenge tech-challenge Public

    repositorio destinado ao tech challenge pos fiap

    Go 1

  2. k8s-terraform k8s-terraform Public

    Terraform do k8s tech challenge

    HCL

  3. terraform-rds terraform-rds Public

    HCL

  4. terraform-lambda terraform-lambda Public

    HCL

  5. lambda-auth lambda-auth Public

    TypeScript

  6. terraform-apigateway terraform-apigateway Public

    HCL

Repositories

Showing 10 of 15 repositories
  • .github Public
    Food-fusion-Fiap/.github’s past year of commit activity
    HTML 0 0 0 0 Updated Sep 11, 2024
  • Food-fusion-Fiap/order-service’s past year of commit activity
    Go 0 Apache-2.0 0 0 0 Updated Sep 10, 2024
  • Food-fusion-Fiap/customer-service’s past year of commit activity
    Go 0 Apache-2.0 0 0 0 Updated Sep 10, 2024
  • Food-fusion-Fiap/payment-service’s past year of commit activity
    Go 0 Apache-2.0 1 0 0 Updated Sep 10, 2024
  • Food-fusion-Fiap/tech-challenge-infra’s past year of commit activity
    HCL 0 0 0 0 Updated Sep 9, 2024
  • Food-fusion-Fiap/order-infra’s past year of commit activity
    HCL 0 0 0 0 Updated Jul 15, 2024
  • Food-fusion-Fiap/apigateway-service’s past year of commit activity
    HCL 0 0 0 0 Updated Jul 15, 2024
  • Food-fusion-Fiap/payment-infra’s past year of commit activity
    HCL 0 0 0 0 Updated Jul 15, 2024
  • Food-fusion-Fiap/customer-terraform’s past year of commit activity
    HCL 0 0 0 0 Updated Jul 15, 2024
  • k8s-terraform Public

    Terraform do k8s tech challenge

    Food-fusion-Fiap/k8s-terraform’s past year of commit activity
    HCL 0 0 0 0 Updated Jul 11, 2024

Top languages

Loading…

Most used topics

Loading…