oa_based/src/app.module.ts

99 lines
3.2 KiB
TypeScript

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';
import { ContractModule } from './modules/contract/contract.module';
import { MaterialsInventoryModule } from './modules/materials_inventory/materials_inventory.module';
import { CompanyModule } from './modules/company/company.module';
import { ProductModule } from './modules/product/product.module';
import { ProjectModule } from './modules/project/project.module';
import { VehicleUsageModule } from './modules/vehicle_usage/vehicle_usage.module';
import { SaleQuotationModule } from './modules/sale_quotation/sale_quotation.module';
import { DomainModule } from './modules/domian/domain.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,
// 合同模块
ContractModule,
// 原材料库存
MaterialsInventoryModule,
// 公司管理
CompanyModule,
// 产品管理
ProductModule,
// 项目管理
ProjectModule,
// 车辆管理
VehicleUsageModule,
//报价管理
SaleQuotationModule,
//域
DomainModule
],
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 }
],
controllers: []
})
export class AppModule {}