Estabelece a fundação operacional de apps/api conforme STACK.md v2.2 e
CODING-RULES.md v2.0, substituindo o hello-world scaffolded.
- tracing.ts primeiro import (PGD-OBS-001) — stub OTel ativável por env
- EnvSchema Zod 4 com fail-fast (superRefine guarda prod) + EnvModule global
- nestjs-pino com redact LGPD (*.cpf|*.cardNumber|*.password|auth|cookie)
- main.ts hardenizado: helmet, CORS por env, compression, versionamento URI
/api/v1, graceful shutdown
- ProblemDetailsFilter global (RFC 9457 application/problem+json), Zod -> 422
- Health endpoints /api/v1/health/{live,ready} com memory.checkHeap(350MB)
(ready skeleton documenta K=3 LRU pool conforme PGD-OBS-003)
- WorkspaceModule via ClsModule.forRootAsync — requestId+workspaceId no CLS,
idGenerator alinhado com pino-http para mesmo UUID em header e body
- GET /api/v1/ping retornando workspaceId+requestId (alvo de smoke test e
futuro healthcheck do docker compose)
- ZodValidationPipe (nestjs-zod) como APP_PIPE global
- tsconfig.app.json target ES2023 (alinhado ao base)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
22 lines
618 B
TypeScript
22 lines
618 B
TypeScript
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
import { Global, Module } from '@nestjs/common';
|
|
import type { Env } from './env.schema';
|
|
import { validateEnv } from './env.schema';
|
|
|
|
// Tipagem do ConfigService<Env, true> garante chaves sem `string | undefined` no caller.
|
|
export type AppConfigService = ConfigService<Env, true>;
|
|
|
|
@Global()
|
|
@Module({
|
|
imports: [
|
|
ConfigModule.forRoot({
|
|
isGlobal: true,
|
|
cache: true,
|
|
// CODING-RULES §08: validate com Zod — fail-fast.
|
|
validate: (raw) => validateEnv(raw),
|
|
}),
|
|
],
|
|
exports: [ConfigModule],
|
|
})
|
|
export class EnvModule {}
|