import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; import { ConfigService } from '@nestjs/config'; import { CommonModule } from './common/common.module'; import { RequestIdMiddleware } from './common/middleware/request-id.middleware'; import { AppConfigModule } from './config/config.module'; import { AuthModule } from './auth/auth.module'; import { UsersModule } from './users/users.module'; import { AuditModule } from './audit/audit.module'; import { RateLimitModule } from './rate-limit/rate-limit.module'; import { LoggingModule } from './logging/logging.module'; import { ProvidersModule } from './providers/providers.module'; import { InquiryModule } from './inquiry/inquiry.module'; import { DatabaseSeederModule } from './database/database-seeder.module'; /** * Root application module — wires all feature and infrastructure modules. */ @Module({ imports: [ AppConfigModule, CommonModule, AuditModule, MongooseModule.forRootAsync({ inject: [ConfigService], useFactory: (config: ConfigService) => ({ uri: config.get('mongodb.uri'), }), }), RateLimitModule, LoggingModule, AuthModule, UsersModule, DatabaseSeederModule, ProvidersModule, InquiryModule, ], }) export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer): void { consumer.apply(RequestIdMiddleware).forRoutes('*'); } }