import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import appConfig from './config/app.config'; import databaseConfig from './config/database.config'; import jwtConfig from './config/jwt.config'; import { configValidationSchema } from './config/validation.schema'; import { AuthModule } from './routes/auth/auth.module'; import { UserModule } from './routes/user/user.module'; import { TypeOrmModule } from '@nestjs/typeorm'; import { AllExceptionsFilter } from './common/filters/all_exceptions.filters'; import { APP_FILTER, APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core'; import { TransformInterceptor } from './common/interceptors/transform.interceptor'; import { RolesGuard } from './common/guards/roles.guard'; @Module({ imports: [ ConfigModule.forRoot({ // Gestion dynamique des fichiers .env envFilePath: [`.env.${process.env.NODE_ENV || 'development'}`, '.env'], // Chargement de configurations typées load: [appConfig, databaseConfig, jwtConfig], isGlobal: true, validationSchema: configValidationSchema, }), TypeOrmModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: (config: ConfigService) => ({ type: 'postgres', host: config.get('database.host'), port: config.get('database.port'), username: config.get('database.username'), password: config.get('database.password'), database: config.get('database.name'), entities: [__dirname + '/**/*.entity{.ts,.js}'], synchronize: false, migrations: [__dirname + '/migrations/**/*{.ts,.js}'], logging: true, }), }), AuthModule, UserModule, ], controllers: [AppController], providers: [AppService, { provide: APP_FILTER, useClass: AllExceptionsFilter }, { provide: APP_INTERCEPTOR, useClass: TransformInterceptor }, { provide: APP_GUARD, useClass: RolesGuard } ], }) export class AppModule {}