OrderHub é um sistema completo de gerenciamento de pedidos desenvolvido com Spring Boot, integrando pagamentos via Abacate Pay, processamento assíncrono com Kafka e APIs reativas com WebFlux.
- ✅ Criação de Pedidos: API REST para criação de pedidos com validação
- ✅ Integração de Pagamentos: Integração com Abacate Pay via Feign Client
- ✅ Processamento Assíncrono: Eventos Kafka para comunicação entre serviços
- ✅ APIs Reativas: Endpoints WebFlux para consultas em tempo real
- ✅ Painel Administrativo: Endpoints para gerenciamento e relatórios
- ✅ Webhooks: Processamento de webhooks do Abacate Pay
- 🔄 Event-Driven Architecture: Kafka para eventos de pedidos, pagamentos, estoque e faturas
- 🔒 Segurança: Spring Security com autenticação básica para endpoints admin
- 📊 Monitoramento: Spring Boot Actuator para métricas e health checks
- 🗄️ Persistência: JPA/Hibernate com suporte a H2 (dev) e PostgreSQL (prod)
- 🔍 Filtros Dinâmicos: JPA Specifications para consultas complexas
- 📱 Streaming: Server-Sent Events para atualizações em tempo real
src/main/java/com/kipperdev/orderhub/
├── config/ # Configurações (Kafka, Feign, Security, WebFlux)
├── controller/ # Controllers REST e WebFlux
├── dto/ # Data Transfer Objects
├── entity/ # Entidades JPA
├── event/ # Eventos Kafka
├── mapper/ # MapStruct mappers
├── repository/ # Repositórios JPA
├── service/ # Lógica de negócio
├── specification/ # JPA Specifications para filtros
└── OrderhubApplication.java
- Criação: Cliente cria pedido via API REST
- Pagamento: Integração automática com Abacate Pay
- Eventos: Publicação de eventos Kafka
- Processamento: Consumo de eventos de estoque e faturamento
- Atualizações: Webhooks do Abacate Pay atualizam status
- Notificações: Streaming de status em tempo real
- Java 21 - Linguagem principal
- Spring Boot 3.5.4 - Framework base
- Spring Data JPA - Persistência
- Spring Security - Segurança
- Spring WebFlux - APIs reativas
- Spring Kafka - Mensageria
- Spring Cloud OpenFeign - Cliente HTTP
- MapStruct - Mapeamento de objetos
- Lombok - Redução de boilerplate
- H2/PostgreSQL - Banco de dados
- Maven - Gerenciamento de dependências
# Criar pedido
POST /orders
Content-Type: application/json
# Consultar status do pedido
GET /orders/{id}
# Consultar pedidos por email (reativo)
GET /public/orders/customer/{email}/status
# Stream de status em tempo real
GET /public/orders/{id}/status/stream
Accept: text/event-stream# Listar pedidos com filtros
GET /admin/orders?status=PAID&customerEmail=user@example.com
# Atualizar status do pedido
PUT /admin/orders/{id}/status?status=SHIPPED
# Estatísticas
GET /admin/orders/stats
# Exportar dados
GET /admin/orders/export?format=csv
# Cancelar pedido
POST /admin/orders/{id}/cancel# Webhook do Abacate Pay
POST /webhook/abacate
Content-Type: application/json
X-Abacate-Signature: {signature}# Banco de Dados (Produção)
DATABASE_URL=jdbc:postgresql://localhost:5432/orderhub
DATABASE_USERNAME=orderhub
DATABASE_PASSWORD=password
# Kafka
KAFKA_BOOTSTRAP_SERVERS=localhost:9092
# Abacate Pay
ABACATEAPI_TOKEN=your-api-token
ABACATEMOCK_ENABLED=false
ABACATEWEBHOOK_SECRET=your-webhook-secret
ABACATEWEBHOOK_SIGNATURE_ENABLED=true
# Admin
ADMIN_USERNAME=admin
ADMIN_PASSWORD=secure-password
# App
APP_BASE_URL=https://your-domain.com- default: Desenvolvimento com H2 e mocks habilitados
- local: Desenvolvimento local sem Kafka
- local-kafka: Desenvolvimento local com Kafka habilitado
- prod: Produção com PostgreSQL e integrações reais
- test: Testes com Kafka embarcado
- docker: Execução em containers Docker
# Clonar repositório
git clone <repository-url>
cd orderhub
# Executar com Maven
./mvnw spring-boot:run
# Ou com profile específico
./mvnw spring-boot:run -Dspring-boot.run.profiles=prod# Build
docker build -t orderhub .
# Run
docker run -p 8080:8080 orderhub# Iniciar infraestrutura Kafka
./scripts/start-kafka-local.sh
# Executar aplicação com Kafka
./mvnw spring-boot:run -Dspring-boot.run.profiles=local-kafka
# Parar infraestrutura Kafka
./scripts/stop-kafka-local.sh📖 Para setup detalhado do Kafka, veja: docs/KAFKA_LOCAL_SETUP.md
# Executar aplicação sem Kafka (padrão)
./mvnw spring-boot:run
# Ou explicitamente
./mvnw spring-boot:run -Dspring-boot.run.profiles=localGET /actuator/healthGET /actuator/metricsURL: http://localhost:8080/h2-console
JDBC URL: jdbc:h2:mem:orderhub
User: sa
Password: (vazio)
orders.created- Pedidos criadospayments.confirmed- Pagamentos confirmadosstock.reserved- Estoque reservadoinvoice.generated- Faturas geradas*.dlt- Dead Letter Topics para falhas
{
"orderId": 123,
"customerEmail": "user@example.com",
"customerName": "João Silva",
"totalAmount": 99.90,
"paymentMethod": "PIX",
"createdAt": "2024-01-15T10:30:00",
"items": [
{
"productSku": "PROD-001",
"productName": "Produto Exemplo",
"quantity": 2,
"unitPrice": 49.95,
"totalPrice": 99.90
}
]
}# Executar todos os testes
./mvnw test
# Testes com profile específico
./mvnw test -Dspring.profiles.active=testcurl -X POST http://localhost:8080/orders \
-H "Content-Type: application/json" \
-d '{
"customer": {
"name": "João Silva",
"email": "joao@example.com",
"phone": "+5511999999999"
},
"items": [
{
"productName": "Produto A",
"productSku": "PROD-A",
"quantity": 2,
"unitPrice": 49.99
}
],
"paymentMethod": "PIX"
}'curl http://localhost:8080/orders/1curl -N http://localhost:8080/public/orders/1/status/stream- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Para suporte e dúvidas:
- 📧 Email: support@kipperdev.com
- 📱 GitHub Issues: Criar Issue
- 📖 Documentação: Wiki do Projeto