Appearance
Arquitetura em Camadas
Clean Architecture aplicada ao NestJS.
Fluxo de Dados
┌─────────────────────────────────────────────────────────────────┐
│ CONTROLLERS │
│ Responsabilidade: │
│ - Receber requisições HTTP │
│ - Validar DTOs de entrada │
│ - Delegar para Services │
│ - Retornar respostas HTTP formatadas │
│ - Documentação Swagger │
└─────────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ SERVICES │
│ Responsabilidade: │
│ - Implementar regras de negócio │
│ - Orquestrar operações │
│ - Validações de domínio │
│ - Transações │
└─────────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ REPOSITORIES │
│ Responsabilidade: │
│ - Abstrair acesso ao banco │
│ - Queries Prisma │
│ - Filtros e paginação │
│ - Soft delete handling │
└─────────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ DATA │
│ Responsabilidade: │
│ - DTOs (validação de entrada/saída) │
│ - Mappers (conversão Entity ↔ DTO) │
│ - Response types │
└─────────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ DOMAIN │
│ Responsabilidade: │
│ - Entidades de negócio (sem dependência de framework) │
│ - Interfaces e contratos │
│ - Enums e constantes │
│ - Value Objects │
│ - ZERO dependência de frameworks externos │
└─────────────────────────────────────────────────────────────────┘Regras de Dependência
- Controllers → podem depender de Services
- Services → podem depender de Repositories e Mappers
- Repositories → podem depender de PrismaService
- Mappers → podem depender apenas de DTOs e Entities
- Domain → ZERO dependências externas
Princípios
- Camadas superiores dependem das inferiores, nunca o contrário
- Domain é o núcleo isolado da aplicação
- Cada camada tem responsabilidade única e bem definida
Documento atualizado em Janeiro 2026