import { ClassSerializerInterceptor, Module } from '@nestjs/common' import { ConfigModule } from '@nestjs/config' import { APP_FILTER, APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core' import config from '~/config' import { SharedModule } from '~/shared/shared.module' import { AllExceptionsFilter } from './common/filters/any-exception.filter' import { IdempotenceInterceptor } from './common/interceptors/idempotence.interceptor' import { TimeoutInterceptor } from './common/interceptors/timeout.interceptor' import { TransformInterceptor } from './common/interceptors/transform.interceptor' import { AuthModule } from './modules/auth/auth.module' import { JwtAuthGuard } from './modules/auth/guards/jwt-auth.guard' import { RbacGuard } from './modules/auth/guards/rbac.guard' import { HealthModule } from './modules/health/health.module' import { NetdiskModule } from './modules/netdisk/netdisk.module' import { SseModule } from './modules/sse/sse.module' import { SystemModule } from './modules/system/system.module' import { TasksModule } from './modules/tasks/tasks.module' import { TodoModule } from './modules/todo/todo.module' import { ToolsModule } from './modules/tools/tools.module' import { DatabaseModule } from './shared/database/database.module' import { SocketModule } from './socket/socket.module' @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, expandVariables: true, // 指定多个 env 文件时,第一个优先级最高 envFilePath: ['.env.local', `.env.${process.env.NODE_ENV}`, '.env'], load: [...Object.values(config)], }), SharedModule, DatabaseModule, AuthModule, SystemModule, TasksModule.forRoot(), ToolsModule, SocketModule, HealthModule, SseModule, NetdiskModule, // biz // end biz TodoModule, ], providers: [ { provide: APP_FILTER, useClass: AllExceptionsFilter }, { provide: APP_INTERCEPTOR, useClass: ClassSerializerInterceptor }, { provide: APP_INTERCEPTOR, useClass: TransformInterceptor }, { provide: APP_INTERCEPTOR, useFactory: () => new TimeoutInterceptor(15 * 1000) }, { provide: APP_INTERCEPTOR, useClass: IdempotenceInterceptor }, { provide: APP_GUARD, useClass: JwtAuthGuard }, { provide: APP_GUARD, useClass: RbacGuard }, ], }) export class AppModule {}