Skip to content

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

  1. Controllers → podem depender de Services
  2. Services → podem depender de Repositories e Mappers
  3. Repositories → podem depender de PrismaService
  4. Mappers → podem depender apenas de DTOs e Entities
  5. 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