74 lines
1.9 KiB
TypeScript
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 {}
|