rwadurian/backend/services/mpc-service/src/app.module.ts

74 lines
1.9 KiB
TypeScript

/**
* 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<string>('JWT_SECRET'),
signOptions: {
expiresIn: configService.get<string>('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 {}