CRM Docs
Arquitetura Backend

Exceções pragmáticas

Desvios conscientes da arquitetura e quando criar um Gateway

A arquitetura é consistente na maior parte do código, mas existem desvios conscientes que o time deve conhecer.

IntegraçãoComo é injetadaObservação
AWS S3AWSS3Service diretoNão existe S3Gateway em app/gateways/
Microserviços*Service em src/external/Registrados em SERVICES do HTTPModule; sem gateway
ConfiguraçãoEnvConfig import estáticoSem ConfigModule / ConfigGateway
Helpers KnexImport de infra/database/knex/utilsUsados em use cases e consumers

Quando criar um novo Gateway

Crie um gateway abstrato quando:

  • A dependência é crítica para testes (mock no use case).
  • mais de uma implementação possível ou provável.
  • A dependência é usada em múltiplos use cases e representa um port de negócio (e-mail, fila, cripto).

Aceite injeção direta quando:

  • É um adapter HTTP único e estável (CustomerService → microserviço).
  • O escopo é restrito a um use case e testes mockam o service, não o gateway.
  • A equipe avalia que o custo do gateway não compensa (ex.: S3 hoje).

External services

src/external/microservices/ e src/external/google/:

  • Classes @Injectable() com Axios.
  • URLs base em EnvConfig.
  • Tipos em types/*.d.ts por serviço.

Exemplos: CustomerService, ProductService, OmieService, MapsService.

Próximos tópicos

On this page