/** * App Module * * Root module for the MPC Party Service. */ import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { JwtModule } from '@nestjs/jwt'; import { APP_FILTER, APP_INTERCEPTOR, APP_GUARD } from '@nestjs/core'; // Configuration import { configurations } from './config'; // Modules import { DomainModule } from './domain/domain.module'; import { InfrastructureModule } from './infrastructure/infrastructure.module'; import { ApplicationModule } from './application/application.module'; import { ApiModule } from './api/api.module'; // Shared import { GlobalExceptionFilter } from './shared/filters/global-exception.filter'; import { TransformInterceptor } from './shared/interceptors/transform.interceptor'; import { JwtAuthGuard } from './shared/guards/jwt-auth.guard'; @Module({ imports: [ // Global configuration ConfigModule.forRoot({ isGlobal: true, load: configurations, envFilePath: ['.env.local', '.env'], }), // JWT module JwtModule.registerAsync({ global: true, inject: [ConfigService], useFactory: (configService: ConfigService) => ({ secret: configService.get('JWT_SECRET'), signOptions: { expiresIn: configService.get('JWT_ACCESS_EXPIRES_IN', '2h'), }, }), }), // Application modules DomainModule, InfrastructureModule, ApplicationModule, ApiModule, ], providers: [ // Global exception filter { provide: APP_FILTER, useClass: GlobalExceptionFilter, }, // Global response transformer { provide: APP_INTERCEPTOR, useClass: TransformInterceptor, }, // Global auth guard { provide: APP_GUARD, useClass: JwtAuthGuard, }, ], }) export class AppModule {}