Skip to content

Fernanda-Kipper/orderhub

Repository files navigation

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

# 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)

# 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

# Webhook do Abacate Pay
POST /webhook/abacate
Content-Type: application/json
X-Abacate-Signature: {signature}

📋 Configuração

Variáveis de Ambiente

# 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

# 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

Docker (Opcional)

# Build
docker build -t orderhub .

# Run
docker run -p 8080:8080 orderhub

Desenvolvimento com Kafka

# 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

Desenvolvimento sem Kafka

# 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

GET /actuator/health

Métricas

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

{
  "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

# Executar todos os testes
./mvnw test

# Testes com profile específico
./mvnw test -Dspring.profiles.active=test

📝 Exemplo de Uso

Criar Pedido

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

curl http://localhost:8080/orders/1

Stream de Status

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:

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published