168 lines
5.0 KiB
TypeScript
168 lines
5.0 KiB
TypeScript
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
|
|
import { APP_GUARD } from '@nestjs/core';
|
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
import { EventEmitterModule } from '@nestjs/event-emitter';
|
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
|
import { ThrottlerModule, ThrottlerGuard } from '@nestjs/throttler';
|
|
import {
|
|
Student,
|
|
Room,
|
|
Occupancy,
|
|
RoomExpense,
|
|
PersonalExpense,
|
|
Bill,
|
|
BillItem,
|
|
User,
|
|
OperationLog,
|
|
Deposit,
|
|
DepositInstallment,
|
|
Classroom,
|
|
Tenant,
|
|
ClassroomRental,
|
|
Permission,
|
|
Role,
|
|
Class,
|
|
ClassStudent,
|
|
ClassTeacher,
|
|
ClassSchedule,
|
|
AttendanceRecord,
|
|
DingAttendanceRaw,
|
|
SyncLog,
|
|
SyncState,
|
|
Notification,
|
|
Department,
|
|
UserDepartment,
|
|
StudentProfile,
|
|
StudentEnrollment,
|
|
ExamScore,
|
|
LearningRecord,
|
|
ResultArchive,
|
|
ArchiveAttachment,
|
|
} from './entities';
|
|
import { AuthModule } from './auth/auth.module';
|
|
import { RbacModule } from './rbac/rbac.module';
|
|
import { StudentsModule } from './students/students.module';
|
|
import { PermissionGuard } from './auth/guards/permission.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 { TenantsModule } from './tenants/tenants.module';
|
|
import { AttendanceModule } from './attendance/attendance.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 { DepartmentsModule } from './departments/departments.module';
|
|
import { CommonModule } from './common/common.module';
|
|
import { ArchiveModule } from './archive/archive.module';
|
|
import { CampusScopeMiddleware } from './common/campus-scope.middleware';
|
|
@Module({
|
|
imports: [
|
|
ConfigModule.forRoot({ isGlobal: true }),
|
|
ThrottlerModule.forRoot([
|
|
{
|
|
ttl: 60000, // 60秒窗口
|
|
limit: 100, // 普通接口每分钟100次
|
|
},
|
|
]),
|
|
EventEmitterModule.forRoot(),
|
|
TypeOrmModule.forRootAsync({
|
|
imports: [ConfigModule],
|
|
inject: [ConfigService],
|
|
useFactory: (config: ConfigService): any => {
|
|
const dbType = config.get('DB_TYPE', 'sqlite');
|
|
const allEntities = [
|
|
Student,
|
|
Room,
|
|
Occupancy,
|
|
RoomExpense,
|
|
PersonalExpense,
|
|
Bill,
|
|
BillItem,
|
|
User,
|
|
OperationLog,
|
|
Deposit,
|
|
DepositInstallment,
|
|
Classroom,
|
|
Tenant,
|
|
ClassroomRental,
|
|
Class,
|
|
ClassStudent,
|
|
ClassTeacher,
|
|
Permission,
|
|
Role,
|
|
ClassSchedule,
|
|
AttendanceRecord,
|
|
DingAttendanceRaw,
|
|
Notification,
|
|
Department,
|
|
UserDepartment,
|
|
StudentProfile,
|
|
StudentEnrollment,
|
|
ExamScore,
|
|
LearningRecord,
|
|
ResultArchive,
|
|
ArchiveAttachment,
|
|
];
|
|
if (dbType === 'mysql') {
|
|
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('DB_PASSWORD', ''),
|
|
database: config.get('DB_DATABASE', 'dorm_billing'),
|
|
entities: allEntities,
|
|
synchronize: config.get('DB_SYNCHRONIZE', 'true') !== 'false',
|
|
charset: 'utf8mb4',
|
|
};
|
|
}
|
|
return {
|
|
type: 'better-sqlite3' as const,
|
|
database: config.get('DB_DATABASE', 'dorm_billing.db'),
|
|
entities: allEntities,
|
|
synchronize: config.get('DB_SYNCHRONIZE', 'true') !== 'false',
|
|
};
|
|
},
|
|
}),
|
|
AuthModule,
|
|
RbacModule,
|
|
StudentsModule,
|
|
RoomsModule,
|
|
OccupanciesModule,
|
|
ExpensesModule,
|
|
BillsModule,
|
|
DashboardModule,
|
|
OperationLogsModule,
|
|
DepositsModule,
|
|
ClassroomsModule,
|
|
AttendanceModule,
|
|
ClassesModule,
|
|
TenantsModule,
|
|
SchedulesModule,
|
|
ClassroomRentalsModule,
|
|
SyncModule,
|
|
NotificationsModule,
|
|
DepartmentsModule,
|
|
CommonModule,
|
|
ArchiveModule,
|
|
],
|
|
providers: [
|
|
{ provide: APP_GUARD, useClass: ThrottlerGuard },
|
|
{ provide: APP_GUARD, useClass: JwtAuthGuard },
|
|
{ provide: APP_GUARD, useClass: PermissionGuard },
|
|
],
|
|
})
|
|
export class AppModule implements NestModule {
|
|
configure(consumer: MiddlewareConsumer) {
|
|
consumer.apply(CampusScopeMiddleware).forRoutes('*');
|
|
}
|
|
}
|