https://github.com/fernanda-kipper/orderhub
https://github.com/fernanda-kipper/orderhub
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/fernanda-kipper/orderhub
- Owner: Fernanda-Kipper
- Created: 2025-07-30T21:07:02.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2025-07-30T22:40:46.000Z (3 months ago)
- Last Synced: 2025-08-28T08:37:00.063Z (2 months ago)
- Language: Java
- Size: 71.3 KB
- Stars: 25
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# OrderHub - Sistema de Gerenciamento de Pedidos
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.
## 🚀 Funcionalidades
### Core Features
- ✅ **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
### Recursos Técnicos
- 🔄 **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
## 🏗️ Arquitetura
### Estrutura do Projeto
```
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
```
### Fluxo de Pedidos
1. **Criação**: Cliente cria pedido via API REST
2. **Pagamento**: Integração automática com Abacate Pay
3. **Eventos**: Publicação de eventos Kafka
4. **Processamento**: Consumo de eventos de estoque e faturamento
5. **Atualizações**: Webhooks do Abacate Pay atualizam status
6. **Notificações**: Streaming de status em tempo real
## 🛠️ Tecnologias
- **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
## 🚦 Endpoints
### APIs Públicas
```http
# 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
```
### APIs Administrativas (Autenticação Requerida)
```http
# 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
```
### Webhooks
```http
# Webhook do Abacate Pay
POST /webhook/abacate
Content-Type: application/json
X-Abacate-Signature: {signature}
```
## 📋 Configuração
### Variáveis de Ambiente
```bash
# 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
```
### Profiles
- **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
## 🚀 Execução
### Desenvolvimento
```bash
# Clonar repositório
git clone
cd orderhub
# Executar com Maven
./mvnw spring-boot:run
# Ou com profile específico
./mvnw spring-boot:run -Dspring-boot.run.profiles=prod
```
### Docker (Opcional)
```bash
# Build
docker build -t orderhub .
# Run
docker run -p 8080:8080 orderhub
```
### Desenvolvimento com Kafka
```bash
# 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](docs/KAFKA_LOCAL_SETUP.md)**
### Desenvolvimento sem Kafka
```bash
# Executar aplicação sem Kafka (padrão)
./mvnw spring-boot:run
# Ou explicitamente
./mvnw spring-boot:run -Dspring-boot.run.profiles=local
```
## 📊 Monitoramento
### Health Check
```http
GET /actuator/health
```
### Métricas
```http
GET /actuator/metrics
```
### Console H2 (Desenvolvimento)
```
URL: http://localhost:8080/h2-console
JDBC URL: jdbc:h2:mem:orderhub
User: sa
Password: (vazio)
```
## 🔄 Eventos Kafka
### Tópicos
- `orders.created` - Pedidos criados
- `payments.confirmed` - Pagamentos confirmados
- `stock.reserved` - Estoque reservado
- `invoice.generated` - Faturas geradas
- `*.dlt` - Dead Letter Topics para falhas
### Exemplo de Evento
```json
{
"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
}
]
}
```
## 🧪 Testes
```bash
# Executar todos os testes
./mvnw test
# Testes com profile específico
./mvnw test -Dspring.profiles.active=test
```
## 📝 Exemplo de Uso
### Criar Pedido
```bash
curl -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"
}'
```
### Consultar Status
```bash
curl http://localhost:8080/orders/1
```
### Stream de Status
```bash
curl -N http://localhost:8080/public/orders/1/status/stream
```
## 🤝 Contribuição
1. Fork o projeto
2. Crie uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)
4. Push para a branch (`git push origin feature/AmazingFeature`)
5. Abra um Pull Request
## 📄 Licença
Este projeto está sob a licença MIT. Veja o arquivo `LICENSE` para mais detalhes.
## 📞 Suporte
Para suporte e dúvidas:
- 📧 Email: support@kipperdev.com
- 📱 GitHub Issues: [Criar Issue](https://github.com/kipperdev/orderhub/issues)
- 📖 Documentação: [Wiki do Projeto](https://github.com/kipperdev/orderhub/wiki)