import { MiddlewareConsumer, Module, type NestModule } from '@nestjs/common'; import { APP_FILTER, APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core'; import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler'; import { AuditModule } from './audit/audit.module'; import { AuthModule } from './auth/auth.module'; import { CaseManagementModule } from './case-management/case-management.module'; import { AuthenticationGuard } from './auth/authentication.guard'; import { ApiExceptionFilter } from './common/api-exception.filter'; import { ApiResponseInterceptor } from './common/api-response.interceptor'; import { RequestIdMiddleware } from './common/request-id.middleware'; import { AppConfigModule } from './config/app-config.module'; import { DatabaseModule } from './database/database.module'; import { HealthController } from './health/health.controller'; import { HealthService } from './health/health.service'; import { FollowUpsModule } from './follow-ups/follow-ups.module'; import { PermissionGuard } from './permissions/permission.guard'; import { PermissionsModule } from './permissions/permissions.module'; import { ParticipationModule } from './participation/participation.module'; import { SecurityModule } from './security/security.module'; import { ServiceApplicationsModule } from './service-applications/service-applications.module'; import { UsersModule } from './users/users.module'; import { ContentNotificationsModule } from './content-notifications/content-notifications.module'; import { StatisticsModule } from './statistics/statistics.module'; import { RequestMetricsService } from './common/request-metrics.service'; import { RequestMetricsInterceptor } from './common/request-metrics.interceptor'; import { SystemMetricsController } from './common/system-metrics.controller'; import { FinancialDisclosuresModule } from './financial-disclosures/financial-disclosures.module'; import { OldItemsModule } from './old-items/old-items.module'; @Module({ imports: [ AppConfigModule, SecurityModule, DatabaseModule, AuditModule, PermissionsModule, ThrottlerModule.forRoot([{ name: 'default', ttl: 60_000, limit: 100 }]), AuthModule, UsersModule, ServiceApplicationsModule, CaseManagementModule, FollowUpsModule, ParticipationModule, ContentNotificationsModule, StatisticsModule, FinancialDisclosuresModule, OldItemsModule, ], controllers: [HealthController, SystemMetricsController], providers: [ HealthService, RequestMetricsService, { provide: APP_GUARD, useClass: ThrottlerGuard }, { provide: APP_GUARD, useClass: AuthenticationGuard }, { provide: APP_GUARD, useClass: PermissionGuard }, { provide: APP_INTERCEPTOR, useClass: ApiResponseInterceptor }, { provide: APP_INTERCEPTOR, useClass: RequestMetricsInterceptor }, { provide: APP_FILTER, useClass: ApiExceptionFilter }, ], }) export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer): void { consumer.apply(RequestIdMiddleware).forRoutes('*'); } }