Projeto de microserviços usando NestJS com arquitetura DDD (Domain-Driven Design), gerenciado com Turbo Repo e pnpm.
- ✅ Autenticação JWT (Login, Register, Refresh Token)
- ✅ Swagger UI para documentação interativa da API
- ✅ PostgreSQL com TypeORM e migrações
- ✅ RabbitMQ para mensageria entre serviços
- ✅ Docker Compose para orquestração de containers
- ✅ CORS habilitado
- ✅ Validação de dados com ValidationPipe
- ✅ Guards JWT para proteção de rotas
- API Gateway (porta 3000) - Ponto de entrada HTTP + Autenticação JWT
- User Service (porta 3001) - Gerenciamento de usuários + PostgreSQL
- Order Service (porta 3002) - Gerenciamento de pedidos + PostgreSQL
- Payment Service (porta 3003) - Processamento de pagamentos + PostgreSQL + Event-driven
- RabbitMQ (portas 5672/15672) - Message broker para comunicação assíncrona
- PostgreSQL Users (porta 5432) - Banco de dados de usuários
- PostgreSQL Orders (porta 5433) - Banco de dados de pedidos
- PostgreSQL Payments (porta 5434) - Banco de dados de pagamentos
Cada microserviço segue a estrutura DDD:
service/
├── domain/ # Entidades e regras de negócio
│ ├── entities/
│ └── repositories/
├── application/ # Casos de uso
│ └── use-cases/
├── infrastructure/ # Implementações técnicas
│ └── repositories/
└── presentation/ # Controllers e DTOs
└── controllers/
- @ecommerce/shared - DTOs e interfaces compartilhadas
- Node.js >= 18
- pnpm >= 10
- Instalar dependências:
pnpm install- Compilar pacote shared:
cd packages/shared
pnpm build
cd ../..docker-compose up --builddocker-compose up -d --builddocker-compose logs -fdocker-compose downdocker-compose down -v- 🌐 API Gateway: http://localhost:3000
- 📚 Swagger UI: http://localhost:3000/api/docs
- 🐰 RabbitMQ Management: http://localhost:15672 (guest/guest)
- 🐘 PostgreSQL Users: localhost:5432
- 🐘 PostgreSQL Orders: localhost:5433
- 🐘 PostgreSQL Payments: localhost:5434
# Iniciar todos os serviços em modo watch
pnpm dev
# Iniciar serviço específico
cd apps/user-service && pnpm dev
cd apps/order-service && pnpm dev
cd apps/api-gateway && pnpm dev# Build de todos os projetos
pnpm build
# Build de serviço específico
cd apps/user-service && pnpm build# Iniciar todos os serviços
pnpm startPOST /auth/register - Registrar novo usuário
{
"name": "João Silva",
"email": "joao@email.com",
"password": "senha123"
}Resposta: { accessToken, refreshToken, user }
POST /auth/login - Login de usuário
{
"email": "joao@email.com",
"password": "senha123"
}Resposta: { accessToken, refreshToken, user }
POST /auth/refresh - Renovar access token
{
"refreshToken": "seu-refresh-token"
}Resposta: { accessToken, refreshToken }
GET /users/:id - Buscar usuário por ID
GET /users - Listar todos os usuários
POST /orders - Criar novo pedido
{
"userId": "uuid-do-usuario",
"items": [
{
"productId": "produto-1",
"quantity": 2,
"price": 99.9
}
]
}GET /orders/:id - Buscar pedido por ID
GET /orders/user/:userId - Listar pedidos de um usuário
GET /orders - Listar todos os pedidos
PATCH /orders/:id/confirm - Confirmar pedido (PENDING → CONFIRMED)
PATCH /orders/:id/ship - Enviar pedido (CONFIRMED → SHIPPED)
PATCH /orders/:id/deliver - Entregar pedido (SHIPPED → DELIVERED)
PATCH /orders/:id/cancel - Cancelar pedido (exceto DELIVERED)
POST /payments - Criar novo pagamento
{
"orderId": "uuid-do-pedido",
"amount": 299.90,
"method": "CREDIT_CARD"
}GET /payments/:id - Buscar pagamento por ID
GET /payments/order/:orderId - Buscar pagamento de um pedido
GET /payments/user/:userId - Listar pagamentos de um usuário
GET /payments - Listar todos os pagamentos
PATCH /payments/:id/refund - Reembolsar pagamento
Fluxo automático: Quando um pedido é aceito (order.created.accepted), o Payment Service cria automaticamente um pagamento e processa. Após processamento, eventos são publicados (payment.completed ou payment.failed) e o Order Service atualiza o status do pedido automaticamente.
Swagger UI: http://localhost:3000/api/docs
- Documentação interativa de todos os endpoints
- Testar APIs diretamente pelo navegador
- Esquemas de dados e validações
- Suporte para autenticação Bearer Token
Documentação Técnica:
- Arquitetura - Visão geral da arquitetura do sistema
- Comandos - Guia de comandos úteis
- Exemplos - Exemplos práticos de uso
- Diagramas C4 - Diagramas de arquitetura (Context, Container, Component)
- ADRs - Architecture Decision Records (decisões arquiteturais)
- Acesse http://localhost:3000/api/docs
- Registre um usuário em
/auth/register - Copie o
accessTokenda resposta - Clique em Authorize no topo da página
- Cole o token e teste os endpoints protegidos
curl -X POST http://localhost:3000/auth/register \
-H "Content-Type: application/json" \
-d '{
"name": "Maria Santos",
"email": "maria@email.com",
"password": "senha123"
}'Resposta inclui accessToken e refreshToken.
curl -X POST http://localhost:3000/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "maria@email.com",
"password": "senha123"
}'curl http://localhost:3000/users \
-H "Authorization: Bearer SEU_ACCESS_TOKEN_AQUI"curl -X POST http://localhost:3000/orders \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_ACCESS_TOKEN_AQUI" \
-d '{
"userId": "COLE_O_ID_DO_USUARIO_AQUI",
"items": [
{
"productId": "produto-1",
"quantity": 2,
"price": 50.00
},
{
"productId": "produto-2",
"quantity": 1,
"price": 100.00
}
]
}'curl -X PATCH http://localhost:3000/orders/ID_DO_PEDIDO/confirmecommerce-microservices/
├── apps/
│ ├── api-gateway/ # Gateway HTTP
│ ├── user-service/ # Microserviço de usuários
│ └── order-service/ # Microserviço de pedidos
├── packages/
│ └── shared/ # Código compartilhado
├── package.json
├── pnpm-workspace.yaml
└── turbo.json
- Entities: Objetos com identidade única (User, Order)
- Value Objects: Objetos sem identidade (OrderItem)
- Repositories: Abstração de persistência
- Use Cases: Lógica de aplicação isolada
- Comunicação TCP entre serviços
- API Gateway como ponto de entrada
- Serviços independentes e desacoplados
- Build cache inteligente
- Execução paralela de tarefas
- Gerenciamento de monorepo
# User Service
cd apps/user-service
pnpm migration:run
cd ../..
# Order Service
cd apps/order-service
pnpm migration:run
cd ../..
# Payment Service
cd apps/payment-service
pnpm migration:run
cd ../..# User Service
cd apps/user-service
pnpm migration:generate NomeDaMigracao
cd ../..
# Order Service
cd apps/order-service
pnpm migration:generate NomeDaMigracao
cd ../..
# Payment Service
cd apps/payment-service
pnpm migration:generate NomeDaMigracao
cd ../..# User Service
cd apps/user-service
pnpm migration:revert
cd ../..
# Order Service
cd apps/order-service
pnpm migration:revert
cd ../..
# Payment Service
cd apps/payment-service
pnpm migration:revert
cd ../..# Database Users
docker exec -it postgres-users psql -U user_service -d users_db
# Database Orders
docker exec -it postgres-orders psql -U order_service -d orders_db
# Database Payments
docker exec -it postgres-payments psql -U payment_service -d payments_db- Dockerizar os serviços
- Adicionar banco de dados PostgreSQL com TypeORM
- Implementar autenticação JWT completa
- Adicionar Swagger UI para documentação
- Configurar RabbitMQ para mensageria
- Implementar event-driven communication com RabbitMQ
- Implementar testes unitários e E2E
- Implementar CI/CD com GitHub Actions
- Implementar circuit breaker
- Implementar observabilidade completa (logs estruturados, métricas, traces) - Ver ADR-001
- Adicionar rate limiting
- Implementar health checks com @nestjs/terminus
- Adicionar versionamento de APIs e eventos