/opt/mawid/apps/api/src
NameSizeModeActions
agent/-0755rm
appointments/-0755rm
auth/-0755rm
clinic/-0755rm
common/-0755rm
config/-0755rm
conversations/-0755rm
health/-0755rm
patients/-0755rm
prisma/-0755rm
reminders/-0755rm
services/-0755rm
staff/-0755rm
summary/-0755rm
tenancy/-0755rm
waitlist/-0755rm
whatsapp/-0755rm
app.module.ts23170644editdlrm
main.ts12860644editdlrm
Edit: /opt/mawid/apps/api/src/app.module.ts (2317B)
import { randomUUID } from 'node:crypto'; import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { APP_GUARD } from '@nestjs/core'; import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler'; import { LoggerModule } from 'nestjs-pino'; import { AgentModule } from './agent/agent.module'; import { AppointmentsModule } from './appointments/appointments.module'; import { AuthModule } from './auth/auth.module'; import { ConversationsModule } from './conversations/conversations.module'; import { PatientsModule } from './patients/patients.module'; import { SummaryModule } from './summary/summary.module'; import { validateEnv } from './config/env'; import { ClinicModule } from './clinic/clinic.module'; import { HealthController } from './health/health.controller'; import { PrismaModule } from './prisma/prisma.module'; import { ServicesModule } from './services/services.module'; import { StaffModule } from './staff/staff.module'; import { WhatsappModule } from './whatsapp/whatsapp.module'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, validate: validateEnv, }), // Structured JSON logs with request ids; PII discipline: no bodies, no auth // headers (PROJECT_PLAN Phase 7 tasks 1 & 4). LoggerModule.forRoot({ pinoHttp: { level: process.env.NODE_ENV === 'production' ? 'info' : 'debug', genReqId: (req) => (req.headers['x-request-id'] as string) ?? randomUUID(), redact: { paths: ['req.headers.authorization', 'req.headers.cookie'], remove: true, }, serializers: { req: (req: { id: string; method: string; url: string }) => ({ id: req.id, method: req.method, url: req.url, }), }, }, }), // Baseline API rate limit per IP; webhook and login have their own caps. ThrottlerModule.forRoot([{ ttl: 60_000, limit: 300 }]), PrismaModule, AuthModule, ClinicModule, StaffModule, ServicesModule, AgentModule, WhatsappModule, AppointmentsModule, PatientsModule, ConversationsModule, SummaryModule, ], controllers: [HealthController], providers: [{ provide: APP_GUARD, useClass: ThrottlerGuard }], }) export class AppModule {}