From 8ee86d0ce23319531d59c1ee04c8965a54771a3c Mon Sep 17 00:00:00 2001 From: pspalmirasara <37162306+pspalmirasara@users.noreply.github.com> Date: Mon, 15 Jul 2024 23:05:45 -0300 Subject: [PATCH] Update README.md --- README.md | 154 ++---------------------------------------------------- 1 file changed, 3 insertions(+), 151 deletions(-) diff --git a/README.md b/README.md index c9ae54d..fbe067e 100644 --- a/README.md +++ b/README.md @@ -1,152 +1,4 @@ -# Fast Food FIAP - Tech Challenge +# Fast Food FIAP - Tech Challenge - Customer Microservice -Este repositório é 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: - - ```bash - docker build . -t placeholder_repository_name -f Dockerfile - ``` - -3. **Deploy com Kubernetes:** - - Aplique os recursos do Kubernetes utilizando o seguinte comando: - - ```bash - kubectl apply -f infra/ - ``` - -4. **Verificação do Status dos Pods:** - - Aguarde até que todos os pods estejam rodando com o comando: - - ```bash - kubectl get pods --watch - ``` - -5. **Pronto.** - -## Remoção de Recursos - -Para apagar todos os recursos criados, utilize o comando: - -```bash -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: - -```bash -k6 run --duration 1m tests/stress.js -``` - -## Testes unitários - -Para realizar testes unitários, execute o seguinte comando: - -```bash -go test ./... -``` - -## Testes com cobertura - -Para realizar testes com cobertura, execute o seguinte comando: - -```bash -go test -cover ./... -``` - -Caso desejar visualizar o relatório de cobertura em HTML, execute o seguinte comando: - -```bash -go test -coverprofile=coverage.out ./... -grep -v "routes.go" coverage.out | grep -v "database.go" | grep -v "main.go" | grep -v "customer_model.go" > filtered_coverage.out -go tool cover -html=filtered_coverage.out -o coverage.html -``` - -Para descobrir o percentual de cobertura, execute o seguinte comando: - -```bash -go tool cover -func=filtered_coverage.out | grep total | awk '{print $3}' -``` - -Para ver os logs de um pod específico, execute o seguinte comando: - -```bash -kubectl logs -f POD_NAME -``` - -## Documentação da API -Ao importar a documentação presente em `docs/tech-challenge.json` 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](https://egon.io/app-v1/) e importe os arquivos `.dst` localizados em `docs/domain_storytelling`. - -#### Arquitetura em Kubernetes -![Arquitetura em Kubernetes](docs/architecture/architecture.png) - -Esta imagem representa a arquitetura em Kubernetes. Oferece uma visão abrangente de como os diferentes componentes e serviços estão organizados e interagem dentro do ambiente Kubernetes no projeto. Para uma compreensão mais completa e dinâmica, disponibilizamos um vídeo demonstrativo que mostra a arquitetura em ação. Este é um cluster local que roda em Docker Desktop (em ambiente Windows) ou Minikube (em ambiente Linux). [Assista ao vídeo](https://youtu.be/QDqb9ZvWR2U) para uma exploração mais detalhada. - -#### Pedido do Cliente -![Pedido do Cliente](docs/domain_storytelling/pedido.png) - -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](docs/domain_storytelling/entrega.png) - -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. - -### 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. - - - -## Licença - -Este projeto está licenciado sob a [Licença MIT](LICENSE). - -## Referências - -- [Documentação do Kubernetes](https://kubernetes.io/docs/) -- [Documentação do K6](https://k6.io/docs/) +SonarCloud: https://sonarcloud.io/summary/new_code?id=Food-fusion-Fiap_customer-service +![image](https://github.com/user-attachments/assets/ab8acb89-bbbc-48be-b3cd-2c1eb74f8527)