CRM Docs
Arquitetura Backend

Três aplicações HTTP

Main, Public e Internal — portas, autenticação e controllers

O serviço sobe três aplicações NestJS independentes no mesmo processo, definidas em src/main.ts. Cada uma tem porta, autenticação e conjunto de controllers próprios.

AppRoot ModulePorta (env)PrefixoAutenticação
MainAppModuleHTTPModuleAPPLICATION_PORTAPPLICATION_PREFIXBearer JWT
PublicPublicAppModulePublicHTTPModuleAPPLICATION_PUBLIC_PORTHeader x-company-key
InternalInternalAppModuleInternalHTTPModuleAPPLICATION_INTERNAL_PORTAPPLICATION_INTERNAL_PREFIXHeader internal-key + company-id

Cada app expõe documentação Scalar em /docs (main: /{prefix}/docs).

Características comuns

  • ValidationPipe global em todas as apps (class-validator nos DTOs).
  • Mesmos use cases podem ser reutilizados por controllers de apps diferentes.
  • Controllers extraem o tenant de formas distintas:
    • Main: req.user.companyId (após AuthenticationMiddleware)
    • Public / Internal: req.company.getId() (após CompanyMiddleware ou InternalMiddleware)

Onde ficam os controllers

AppPasta de controllers
Mainsrc/infra/http/controllers/
Publicsrc/infra/http-public/public/controllers/
Internalsrc/infra/http-internal/controllers/

Módulos HTTP

Não existem módulos Nest por feature. O wiring é centralizado:

  • src/infra/http/http.module.ts — controllers, use cases, guards globais, middleware JWT
  • src/infra/http-public/http.module.ts — superfície pública
  • src/infra/http-internal/http.module.ts — superfície interna

Cada módulo HTTP importa DatabaseModule, BrokerModule, EncryptModule, etc., conforme necessidade.

Próximos tópicos

On this page