Skip to content

efcjunior/ecommerce-demo-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

✅ Atendimento ao Caso Técnico – E-commerce Backend

🔐 Autenticação

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 ADMIN e USER com controle via @PreAuthorize.
  • ✅ Rotas /auth/** públicas.
  • ✅ O usuário da API deve se registrar via /auth/register e obter o token JWT através de /auth/login.

🧱 Produtos

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.

💳 Pedidos

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.paid no Kafka e atualizar estoque.

Entregue:

  • ✅ Criação de pedido com cálculo de total e validação de estoque.
  • ✅ Status PENDING e CANCELED corretamente aplicados.
  • ✅ Pagamento publica evento no Kafka.
  • ✅ Consumer atualiza estoque no MySQL.

📊 Relatórios

Pedido:

  1. Top 5 usuários com maior valor em pedidos pagos.
  2. Ticket médio por usuário, com filtro de data.
  3. Faturamento total do mês atual.

Entregue:

  • ✅ Todos os relatórios implementados.
  • ✅ Filtros por data funcionais.
  • ✅ Retornos corretos via use cases e DTOs.

🗃 Entidades e Persistência

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.

⚙️ Regras de Negócio

Pedido:

  • Validação de estoque no momento da criação do pedido.
  • Atualização do estoque após pagamento.
  • Evento order.paid no 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.

🧩 Arquitetura

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.

⚠️ Apontamentos de Melhoria

  1. Personalizar exceções na camada Use Case e tratá-las externamente, exibindo mensagens amigáveis e HTTP status corretos.
  2. Adicionar logs estruturados e métricas de performance (ES, Kafka, relatórios).
  3. Melhorar rotina batch de reindexação — hoje reindexa toda a tabela; ajustar para processar apenas produtos alterados.
  4. Implementar retry ou fila para falhas de sincronização entre MySQL e Elasticsearch.
  5. Substituir controle de duplicidade Kafka (HashSet) por Redis ou persistência.
  6. Padronizar exceções (BusinessException, NotFoundException) e centralizar em @ControllerAdvice.
  7. Adicionar testes de integração com containers (MySQL, Kafka, Elasticsearch).
  8. Centralizar roles em enum Role { ADMIN, USER }.
  9. Registrar logs detalhados no fluxo de pedidos e relatórios.
  10. Incluir mensagens de erro descritivas em cancelamentos e relatórios.

🚀 Ambiente de Desenvolvimento

🧩 Serviços Disponíveis (Docker Compose)

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

🐳 Comandos Docker

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

🧠 Executar a Aplicação

mvn spring-boot:run -Dspring-boot.run.profiles=dev

Ou definir o perfil de ambiente antes de iniciar:

export SPRING_PROFILES_ACTIVE=dev

🗄️ Banco de Dados

  • 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.

🧰 Tecnologias Utilizadas

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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages