Repositório do tech challenge 1 da FIAP/Alura
As principais tecnologias utilizadas na consutração da aplicação foram:
- Linguagem TypeScript
- Framework NestJS
- Banco de dados MySQL
- Swagger para documentação das APIs
Para documenação dos fluxos criamos um board na ferramenta Miro onde foi desenhado o fluxo de negócio e disponibilizado o dicionário de linguagem ubíqua.
Link de acesso ao Miro: https://miro.com/app/board/uXjVMCbokg0=/?share_link_id=11757782716
Para iniciar a aplicação foi disponibilizado um aquivo docker-compose.yml com as configurações necessárias para execução, incluindo o build da aplição em uma imagem Docker e um container para o banco de dados MySQL.
Comando de inicialização:
docker compose up
Para documentação das APIs utilizamos o framework Swagger. Após a inicialização da aplicação o mesmo fica disponível em http://localhost:3000/api, onde é possível realizar requisições para os endpoints através do mesmo.
Na própria página do Swagger é disponibilizado exemplos de requests.
- CRUD de clientes
- CRUD de produtos
- Criação e gerenciamento de pedidos
- Inicialização do pedido sendo opcional informar o id de um cliente pré cadastrado
curl -X 'POST' \
'http://localhost:3000/pedidos' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"clienteId": null
}'
- Adição de itens no pedido
curl -X 'POST' \
'http://localhost:3000/pedidos/2/itens' \
-H 'accept: */*' \
-H 'Content-Type: application/json' \
-d '{
"produtoId": 1,
"quantidade": 1,
"observacao": "Sem picles"
}'
- Atualização de itens já inseridos no pedido caso necessário
curl -X 'PATCH' \
'http://localhost:3000/pedidos/2/itens/1' \
-H 'accept: */*' \
-H 'Content-Type: application/json' \
-d '{
"quantidade": 5,
"observacao": "Com bastante picles"
}'
- Remoção de itens já inseridos no pedido caso necessário
curl -X 'DELETE' \
'http://localhost:3000/pedidos/2/itens/1' \
-H 'accept: */*'
- Confirmação de pagamento do pedido
curl -X 'POST' \
'http://localhost:3000/pedidos/2/confirm' \
-H 'accept: */*' \
-H 'Content-Type: application/json' \
-d '{}'
- Inicio da prepração do pedido
curl -X 'PUT' \
'http://localhost:3000/cozinha/pedidos/2/status' \
-H 'accept: */*' \
-H 'Content-Type: application/json' \
-d '{
"status": "EM_PREPARACAO"
}'
- Conclusão da preparação do pedido
curl -X 'PUT' \
'http://localhost:3000/cozinha/pedidos/2/status' \
-H 'accept: */*' \
-H 'Content-Type: application/json' \
-d '{
"status": "PRONTO"
}'
- Finalização do pedido
curl -X 'PUT' \
'http://localhost:3000/cozinha/pedidos/2/status' \
-H 'accept: */*' \
-H 'Content-Type: application/json' \
-d '{
"status": "FINALIZADO"
}'