import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { APP_GUARD } from '@nestjs/core'; import { DatabaseModule } from './database/database.module'; import { AuthModule } from './auth/auth.module'; import { UsersModule } from './users/users.module'; import { JwtAuthGuard } from './auth/auth.guard'; import { RateLimitMiddleware } from './common/middleware/rate-limit.middleware'; import { SecurityMiddleware } from './common/middleware/security.middleware'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, envFilePath: ['.env.local', '.env'], cache: true, }), DatabaseModule, AuthModule, UsersModule, ], providers: [ { provide: APP_GUARD, useClass: JwtAuthGuard, }, ], }) export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { // Apply security middleware to all routes consumer .apply(SecurityMiddleware) .forRoutes('*'); // Apply rate limiting to authentication routes consumer .apply(RateLimitMiddleware) .forRoutes('auth/*'); } }