Skip to content

Commit

Permalink
Merge pull request #27 from Food-fusion-Fiap/pspalmirasara-patch-1
Browse files Browse the repository at this point in the history
Update README.md
  • Loading branch information
pspalmirasara authored Jul 16, 2024
2 parents afbd51e + 8ee86d0 commit 3216e7d
Showing 1 changed file with 3 additions and 151 deletions.
154 changes: 3 additions & 151 deletions README.md
Original file line number Diff line number Diff line change
@@ -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.

<!--
## Contribuição
Este projeto está aberto para contribuições. Caso queira contribuir, por favor, faça um fork do repositório, implemente as alterações e envie um pull request.
-->

## 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)

0 comments on commit 3216e7d

Please sign in to comment.