Pedido:
- Implementar autenticação JWT.
- Criar perfis de usuário:
- Admin: CRUD de produtos e relatórios.
- User: criação e pagamento de pedidos, listagem de produtos.
Entregue:
- ✅ JWT funcional com geração e validação de token.
- ✅ Perfis
ADMINeUSERcom controle via@PreAuthorize. - ✅ Rotas
/auth/**públicas. - ✅ O usuário da API deve se registrar via
/auth/registere obter o token JWT através de/auth/login.
Pedido:
- CRUD completo (id, nome, descrição, preço, categoria, estoque, datas).
- Busca via Elasticsearch com:
- Tolerância a erros de digitação (fuzzy search).
- Filtros por categoria e faixa de preço.
- Apenas produtos com estoque disponível.
- Sincronização MySQL ↔ Elasticsearch em criação, atualização e exclusão.
Entregue:
- ✅ CRUD completo implementado.
- ✅ Busca com
fuzziness("AUTO")e filtros aplicados. - ✅ Filtro de estoque ativo.
- ✅ Indexação automática no Elasticsearch ao criar, atualizar e excluir.
Pedido:
- Criar pedido com múltiplos produtos.
- Status inicial
PENDING; se faltar estoque,CANCELED. - Calcular total com base no preço atual.
- Após pagamento, publicar evento
order.paidno Kafka e atualizar estoque.
Entregue:
- ✅ Criação de pedido com cálculo de total e validação de estoque.
- ✅ Status
PENDINGeCANCELEDcorretamente aplicados. - ✅ Pagamento publica evento no Kafka.
- ✅ Consumer atualiza estoque no MySQL.
Pedido:
- Top 5 usuários com maior valor em pedidos pagos.
- Ticket médio por usuário, com filtro de data.
- Faturamento total do mês atual.
Entregue:
- ✅ Todos os relatórios implementados.
- ✅ Filtros por data funcionais.
- ✅ Retornos corretos via use cases e DTOs.
Pedido:
- Todas as entidades persistidas em MySQL.
- Produtos indexados também no Elasticsearch.
Entregue:
- ✅ Entidades persistidas via Spring Data JPA.
- ✅ Produtos indexados e sincronizados com o ES.
- ✅ Transações garantem consistência entre as camadas.
Pedido:
- Validação de estoque no momento da criação do pedido.
- Atualização do estoque após pagamento.
- Evento
order.paidno Kafka. - Autenticação e autorização corretas por perfil.
Entregue:
- ✅ Todas as regras aplicadas conforme especificação.
- ✅ Producer e consumer Kafka operando corretamente.
- ✅ Perfis e permissões validadas.
Pedido:
- Aplicar Clean Architecture, conforme o fluxo:
- Controller → Use Case → Gateway → Infrastructure
Entregue:
- ✅ Estrutura fiel ao documento Fluxo de Interação.pdf.
- ✅ Camadas bem isoladas e gateways independentes.
- Personalizar exceções na camada Use Case e tratá-las externamente, exibindo mensagens amigáveis e HTTP status corretos.
- Adicionar logs estruturados e métricas de performance (ES, Kafka, relatórios).
- Melhorar rotina batch de reindexação — hoje reindexa toda a tabela; ajustar para processar apenas produtos alterados.
- Implementar retry ou fila para falhas de sincronização entre MySQL e Elasticsearch.
- Substituir controle de duplicidade Kafka (HashSet) por Redis ou persistência.
- Padronizar exceções (
BusinessException,NotFoundException) e centralizar em@ControllerAdvice. - Adicionar testes de integração com containers (MySQL, Kafka, Elasticsearch).
- Centralizar roles em enum
Role { ADMIN, USER }. - Registrar logs detalhados no fluxo de pedidos e relatórios.
- Incluir mensagens de erro descritivas em cancelamentos e relatórios.
O projeto inclui um ambiente completo de desenvolvimento configurado via Docker Compose.
Todos os serviços se conectam na mesma rede ecommerce-net.
| Serviço | Descrição | URL de Acesso / Porta |
|---|---|---|
| MySQL | Banco de dados principal | localhost:3306 |
| Adminer | Interface web para o MySQL | http://localhost:8081 |
| Elasticsearch | Engine de busca | http://localhost:9200 |
| Elasticsearch Head | UI para inspeção do índice ES | http://localhost:9100 |
| Zookeeper | Coordenação do Kafka | localhost:2181 |
| Kafka | Broker de mensageria | localhost:9093 |
| Kafka UI | Interface de gerenciamento do Kafka | http://localhost:8085 |
| Swagger UI | Swagger | http://localhost:8080/swagger-ui/index.html |
Subir os containers (modo background):
docker compose -f docker-compose.dev.yml up -d
Encerrar e remover os containers:
docker compose -f docker-compose.dev.yml up -d
mvn spring-boot:run -Dspring-boot.run.profiles=devOu definir o perfil de ambiente antes de iniciar:
export SPRING_PROFILES_ACTIVE=dev- O banco de dados e suas tabelas são criadas automaticamente no startup através do Flyway, garantindo versionamento, migrações controladas e consistência entre ambientes.
| Tecnologia | Versão / Observação |
|---|---|
| Java | 25 (JDK 25) |
| Spring Boot | 3.5.x (Web, Security, Data JPA, Kafka) |
| MySQL | 8.0 |
| Elasticsearch | 8.14.3 |
| Kafka | 3.8.0 + Zookeeper 3.8.4 |
| Docker Compose | 3.8 |
| Adminer | latest |
| Kafka UI | latest |