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.
| App | Root Module | Porta (env) | Prefixo | Autenticação |
|---|---|---|---|---|
| Main | AppModule → HTTPModule | APPLICATION_PORT | APPLICATION_PREFIX | Bearer JWT |
| Public | PublicAppModule → PublicHTTPModule | APPLICATION_PUBLIC_PORT | — | Header x-company-key |
| Internal | InternalAppModule → InternalHTTPModule | APPLICATION_INTERNAL_PORT | APPLICATION_INTERNAL_PREFIX | Header internal-key + company-id |
Cada app expõe documentação Scalar em /docs (main: /{prefix}/docs).
Características comuns
ValidationPipeglobal em todas as apps (class-validatornos DTOs).- Mesmos use cases podem ser reutilizados por controllers de apps diferentes.
- Controllers extraem o tenant de formas distintas:
- Main:
req.user.companyId(apósAuthenticationMiddleware) - Public / Internal:
req.company.getId()(apósCompanyMiddlewareouInternalMiddleware)
- Main:
Onde ficam os controllers
| App | Pasta de controllers |
|---|---|
| Main | src/infra/http/controllers/ |
| Public | src/infra/http-public/public/controllers/ |
| Internal | src/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 JWTsrc/infra/http-public/http.module.ts— superfície públicasrc/infra/http-internal/http.module.ts— superfície interna
Cada módulo HTTP importa DatabaseModule, BrokerModule, EncryptModule, etc., conforme necessidade.
Próximos tópicos
- HTTP e GCI — middleware, controllers finos e permissões
- Multi-tenant — origem do
companyIdem cada app