- imports: 新增 preflight_import 预检报告(判定/分阶段统计/阻断归因/问题/下一步/错误示例),导入任务 settings 落库(映射/校区/更新/重复/未匹配策略),预览应用策略,向导提交写操作日志 - ai-chat: 新增 excel_analyze(ExcelJS)工具,移除附件/上下文截断,start_import_wizard 支持确认参数,ui.import_preflight SSE,预览确认写操作日志 - admin: ImportPreflightCard 渲染与持久化,聊天抽屉布局/侧边栏修复,考勤页 CSS 引入,费用/学生页接口 schema 校验修复
209 lines
8.1 KiB
TypeScript
209 lines
8.1 KiB
TypeScript
import { Module } from '@nestjs/common';
|
|
import { APP_GUARD } from '@nestjs/core';
|
|
import { LoggerModule } from 'nestjs-pino';
|
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
import { EventEmitterModule } from '@nestjs/event-emitter';
|
|
import { TypeOrmModule, type TypeOrmModuleOptions } from '@nestjs/typeorm';
|
|
import { ThrottlerModule, ThrottlerGuard } from '@nestjs/throttler';
|
|
import { ScheduleModule } from '@nestjs/schedule';
|
|
import * as Entities from './entities';
|
|
import { AuthModule } from './auth/auth.module';
|
|
import { InitialSchema1784520727860 } from './migrations/1784520727860-InitialSchema';
|
|
import { AddExamManagement1784600000000 } from './migrations/1784600000000-AddExamManagement';
|
|
import { AddRoomInspections1784680000000 } from './migrations/1784680000000-AddRoomInspections';
|
|
import { AddJinshujuMatchRules1784700000000 } from './migrations/1784700000000-AddJinshujuMatchRules';
|
|
import { AddAiChat1784780000000 } from './migrations/1784780000000-AddAiChat';
|
|
import { EnhanceAiChatForAntDesignX1784860000000 } from './migrations/1784860000000-EnhanceAiChatForAntDesignX';
|
|
import { AddA2UiForms1784870000000 } from './migrations/1784870000000-AddA2UiForms';
|
|
import { AddA2UiReviews1784880000000 } from './migrations/1784880000000-AddA2UiReviews';
|
|
import { AddImportRuns1784910000000 } from './migrations/1784910000000-AddImportRuns';
|
|
import { DropAiMessageFeedback1784920000000 } from './migrations/1784920000000-DropAiMessageFeedback';
|
|
import { AddImportRunSettings1784930000000 } from './migrations/1784930000000-AddImportRunSettings';
|
|
const allMigrations = [
|
|
InitialSchema1784520727860,
|
|
AddExamManagement1784600000000,
|
|
AddRoomInspections1784680000000,
|
|
AddJinshujuMatchRules1784700000000,
|
|
AddAiChat1784780000000,
|
|
EnhanceAiChatForAntDesignX1784860000000,
|
|
AddA2UiForms1784870000000,
|
|
AddA2UiReviews1784880000000,
|
|
AddImportRuns1784910000000,
|
|
DropAiMessageFeedback1784920000000,
|
|
AddImportRunSettings1784930000000,
|
|
];
|
|
import { AuthorizationModule } from './authorization';
|
|
import { RbacModule } from './rbac/rbac.module';
|
|
import { StudentsModule } from './students/students.module';
|
|
import { PermissionGuard } from './auth/guards/permission.guard';
|
|
import { PoliciesGuard } from './authorization/guards/policies.guard';
|
|
import { JwtAuthGuard } from './auth/guards/jwt-auth.guard';
|
|
import { RoomsModule } from './rooms/rooms.module';
|
|
import { OccupanciesModule } from './occupancies/occupancies.module';
|
|
import { ExpensesModule } from './expenses/expenses.module';
|
|
import { BillsModule } from './bills/bills.module';
|
|
import { DashboardModule } from './dashboard/dashboard.module';
|
|
import { OperationLogsModule } from './operation-logs/operation-logs.module';
|
|
import { DepositsModule } from './deposits/deposits.module';
|
|
import { ClassroomsModule } from './classrooms/classrooms.module';
|
|
import { ClassesModule } from './classes/classes.module';
|
|
import { OrganizationsModule } from './organizations/organizations.module';
|
|
import { AttendanceModule } from './attendance/attendance.module';
|
|
import { AttendanceDevicesModule } from './attendance-devices/attendance-devices.module';
|
|
import { SchedulesModule } from './schedules/schedules.module';
|
|
import { ClassroomRentalsModule } from './classroom-rentals/classroom-rentals.module';
|
|
import { SyncModule } from './sync/sync.module';
|
|
import { NotificationsModule } from './notifications/notifications.module';
|
|
import { ArchiveModule } from './archive/archive.module';
|
|
import { ExpenseTypesModule } from './expense-types/expense-types.module';
|
|
import { DatabaseMigrationsModule } from './database/database-migrations.module';
|
|
import { AgentToolsModule } from './agent-tools';
|
|
import { AiConfigModule } from './ai-config/ai-config.module';
|
|
import { WalletsModule } from './wallets/wallets.module';
|
|
import { FinancialOperationsModule } from './financial-operations/financial-operations.module';
|
|
import { ExamsModule } from './exams/exams.module';
|
|
import { AiChatModule } from './ai-chat';
|
|
import { ImportsModule } from './imports/imports.module';
|
|
|
|
import {
|
|
IntegrationConfig,
|
|
IntegrationConfigDetail,
|
|
} from './integration/entities/integration-config.entity';
|
|
import { IntegrationConfigModule } from './integration/config/config.module';
|
|
|
|
@Module({
|
|
imports: [
|
|
LoggerModule.forRoot({
|
|
pinoHttp: {
|
|
level: process.env.LOG_LEVEL ?? 'info',
|
|
autoLogging: process.env.NODE_ENV === 'production',
|
|
},
|
|
}),
|
|
AuthorizationModule,
|
|
ConfigModule.forRoot({ isGlobal: true }),
|
|
ThrottlerModule.forRoot([
|
|
{
|
|
ttl: 60000, // 60秒窗口
|
|
limit: 100, // 普通接口每分钟100次
|
|
},
|
|
]),
|
|
EventEmitterModule.forRoot(),
|
|
ScheduleModule.forRoot(),
|
|
TypeOrmModule.forRootAsync({
|
|
imports: [ConfigModule],
|
|
inject: [ConfigService],
|
|
useFactory: (config: ConfigService): TypeOrmModuleOptions => {
|
|
const allEntities = [
|
|
Entities.Student,
|
|
Entities.Room,
|
|
Entities.Occupancy,
|
|
Entities.Bed,
|
|
Entities.Locker,
|
|
Entities.RoomExpense,
|
|
Entities.PersonalExpense,
|
|
Entities.Bill,
|
|
Entities.BillItem,
|
|
Entities.User,
|
|
Entities.OperationLog,
|
|
Entities.RoomInspection,
|
|
Entities.RoomInspectionDetail,
|
|
Entities.Deposit,
|
|
Entities.DepositInstallment,
|
|
Entities.Classroom,
|
|
Entities.Organization,
|
|
Entities.ClassroomRental,
|
|
Entities.Class,
|
|
Entities.ClassStudent,
|
|
Entities.ClassTeacher,
|
|
Entities.Permission,
|
|
Entities.Role,
|
|
Entities.ClassSchedule,
|
|
Entities.AttendanceRecord,
|
|
Entities.AttendanceSession,
|
|
Entities.AttendanceDevice,
|
|
Entities.AttendancePeriodConfig,
|
|
Entities.DingAttendanceRaw,
|
|
Entities.DingLeaveRaw,
|
|
Entities.Notification,
|
|
Entities.StudentProfile,
|
|
Entities.StudentEnrollment,
|
|
Entities.ExamScore,
|
|
Entities.Exam,
|
|
Entities.LearningRecord,
|
|
Entities.StudentDingMapping,
|
|
Entities.JinshujuMatchRule,
|
|
Entities.ExpenseType,
|
|
Entities.ArchiveAttachment,
|
|
Entities.ResultArchive,
|
|
Entities.SyncLog,
|
|
Entities.SyncState,
|
|
IntegrationConfig,
|
|
IntegrationConfigDetail,
|
|
Entities.AiConfig,
|
|
Entities.StudentWallet,
|
|
Entities.WalletTransaction,
|
|
Entities.FinancialOperation,
|
|
Entities.AiConversation,
|
|
Entities.AiMessage,
|
|
Entities.AiToolRun,
|
|
Entities.AiAttachment,
|
|
Entities.AiForm,
|
|
Entities.AiReview,
|
|
Entities.ImportRun,
|
|
Entities.ImportStep,
|
|
Entities.ImportRow,
|
|
];
|
|
return {
|
|
type: 'mysql' as const,
|
|
host: config.get('DB_HOST', 'localhost'),
|
|
port: config.get<number>('DB_PORT', 3306),
|
|
username: config.get('DB_USERNAME', 'root'),
|
|
password: config.get<string>('DB_PASSWORD', ''),
|
|
database: config.get<string>('DB_DATABASE', 'dorm_billing'),
|
|
entities: allEntities,
|
|
migrations: allMigrations,
|
|
synchronize: config.get('DB_SYNCHRONIZE', 'true') !== 'false',
|
|
charset: 'utf8mb4',
|
|
};
|
|
},
|
|
}),
|
|
DatabaseMigrationsModule,
|
|
AuthModule,
|
|
RbacModule,
|
|
StudentsModule,
|
|
ExamsModule,
|
|
RoomsModule,
|
|
OccupanciesModule,
|
|
ExpensesModule,
|
|
BillsModule,
|
|
DashboardModule,
|
|
OperationLogsModule,
|
|
DepositsModule,
|
|
WalletsModule,
|
|
FinancialOperationsModule,
|
|
ClassroomsModule,
|
|
AttendanceModule,
|
|
AttendanceDevicesModule,
|
|
ClassesModule,
|
|
OrganizationsModule,
|
|
SchedulesModule,
|
|
ClassroomRentalsModule,
|
|
SyncModule,
|
|
NotificationsModule,
|
|
ArchiveModule,
|
|
IntegrationConfigModule,
|
|
AgentToolsModule,
|
|
ExpenseTypesModule,
|
|
AiConfigModule,
|
|
AiChatModule,
|
|
ImportsModule,
|
|
],
|
|
providers: [
|
|
{ provide: APP_GUARD, useClass: ThrottlerGuard },
|
|
{ provide: APP_GUARD, useClass: JwtAuthGuard },
|
|
{ provide: APP_GUARD, useClass: PermissionGuard },
|
|
{ provide: APP_GUARD, useClass: PoliciesGuard },
|
|
],
|
|
})
|
|
export class AppModule {}
|