API de Pedidos
Com a Product API pronta, o próximo passo é implementar a Order API. Os pedidos estão vinculados a usuários autenticados e referenciam produtos existentes.
flowchart LR
subgraph api [Camada confiável]
gateway --> account
gateway --> auth
account --> db@{ shape: cyl, label: "Banco de dados" }
auth --> account
gateway e5@==> product
gateway e6@==> order:::red
product e2@==> db
order e3@==> db
order e4@==> product
end
internet e1@==>|requisição| gateway
e1@{ animate: true }
e2@{ animate: true }
e3@{ animate: true }
e4@{ animate: true }
e5@{ animate: true }
e6@{ animate: true }
classDef red fill:#fcc
click order "#order-api" "Order API" Atenção
Para consumir a API, o usuário deve estar autenticado.
Order API
POST /orders
Cria um novo pedido para o usuário atual.
GET /orders
Obtém todos os pedidos do usuário atual.
GET /orders/{id}
Obtém os detalhes do pedido pelo seu ID. O pedido deve pertencer ao usuário atual; caso contrário, retorne 404.
Um parâmetro de consulta opcional, currency, permite que os totais sejam retornados em outra moeda. Quando omitido, os valores são retornados em USD (a moeda de armazenamento no banco de dados).
Armazenamento da moeda
Todos os valores monetários são armazenados no banco de dados em dólares americanos (USD). Quando o parâmetro currency for informado, o serviço deve chamar a Exchange API para converter os totais antes de retornar a resposta.
Openfeign
Se você estiver usando Spring Boot, pode aproveitar o OpenFeign para criar um cliente REST declarativo para a Exchange API. Assim, você integra facilmente a lógica de conversão de moedas à sua Order API sem precisar tratar manualmente as requisições e respostas HTTP.
Adicionais
Funcionalidades adicionais são bem-vindas, como:
- Busca de produtos por nome (com "like");
- Autorização por papel (admin, user):
- Admin pode criar, atualizar e excluir produtos;
- User pode apenas criar pedidos;
- Validação de entrada;
- Tratamento de erros.
Desejável
- Observabilidade (métricas, logs), veja Prometheus e Grafana;
- Banco de dados em memória (sugestão: microsserviço Product), veja Redis;
- Documentação Swagger, veja SpringDoc.
Entrega
Individualmente, cada aluno deve criar um repositório no GitHub, com a documentação em MkDocs dos exercícios realizados e também com o projeto e entregar o link via Blackboard. Na documentação publicada deve constar:
- Nome do aluno e grupo;
- Documentação das atividades realizadas;
- Código fonte das atividades realizadas;
- Documentação do projeto;
- Código fonte do projeto;
- Link para todos os repositórios utilizados;
- Destaques para os bottlenecks implementados (ao menos 2 por indivíduo);
- Apresentação do projeto;
- Vídeo de apresentação do projeto (2-3 minutos);
Um template de documentação pode ser encontrado em Template de Documentação.