Arquitetura Backend
Repository customizado
Gateways e repositories standalone para domínios complexos
Nem todo agregado cabe no modelo CRUD padrão. Domínios com joins, buscas facetadas, operações em lote ou regras de workflow usam um gateway standalone e um repository Knex standalone.
Quando não usar DefaultRepositoryGateway
- Buscas com múltiplos filtros e paginação (
search,count). - Operações de domínio nomeadas (
mergeAttendances,closeAttendance,moveCard). - Joins entre várias tabelas em uma única operação.
- Relatórios e agregações pesadas.
Exemplo de referência: Attendance
Gateway: src/app/gateways/attendance.repository.gateway.ts
Define dezenas de métodos de negócio (getAttendanceById, search, closeAttendance, etc.) sem herdar DefaultRepositoryGateway.
Repository: src/infra/database/knex/repositories/knex-attendance.repository.ts
@Injectable()
export class KnexAttendanceRepository implements AttendanceRepositoryGateway {
constructor(private companyDbGenerator: CompanyKnexProvider) {}
// implementação com queries Knex customizadas
}Note: usa implements, não extends KnexDefaultRepository.
Guia de decisão
| Cenário | Gateway | Repository Knex |
|---|---|---|
| Tabela simples, só CRUD | extends DefaultRepositoryGateway<...> | extends KnexDefaultRepository + implements Gateway |
| CRUD + poucas queries extras | Gateway estende default + abstract extras | extends KnexDefaultRepository + métodos adicionais |
| Domínio complexo (atendimento, board, customer) | abstract class standalone | implements XxxGateway standalone |
| Integração externa (e-mail, fila) | {Service}Gateway | Implementação em módulo infra dedicado |
Outros exemplos de repositories customizados
KnexBoardRepository/BoardRepositoryGateway— kanbanKnexCustomerRepository/CustomerRepositoryGateway— cliente com vínculosKnexReportRepository/ReportRepositoryGateway— relatóriosKnexUserRepository/UserRepositoryGateway— usuário e permissões
Próximos tópicos
- DefaultRepositoryGateway — modelo CRUD padrão
- Nova feature — walkthrough de domínio complexo (Attendance)