Files
gongxue-base/apps/server/src/app.module.ts
wangziqi 46a817503e feat(task1): restructure directories for turborepo monorepo
- Move backend/ to apps/server/ via git mv
- Move frontend/ to apps/admin/ via git mv
- Create packages/typescript-config/ with base, nestjs, and react-vite presets
2026-07-02 15:05:12 +08:00

84 lines
3.0 KiB
TypeScript

import { Module } from '@nestjs/common';
import { APP_GUARD } from '@nestjs/core';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ThrottlerModule, ThrottlerGuard } from '@nestjs/throttler';
import {
Student, Room, Occupancy, RoomExpense, PersonalExpense,
Bill, BillItem, User, OperationLog, Deposit, Classroom,
Tenant, ClassroomRental, Permission, Role,
} 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 { 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 { TenantsModule } from './tenants/tenants.module';
import { ClassroomRentalsModule } from './classroom-rentals/classroom-rentals.module';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
ThrottlerModule.forRoot([{
ttl: 60000, // 60秒窗口
limit: 100, // 普通接口每分钟100次
}]),
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, Classroom,
Tenant, ClassroomRental, Permission, Role,
];
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: true,
charset: 'utf8mb4',
};
}
return {
type: 'better-sqlite3' as const,
database: config.get('DB_DATABASE', 'dorm_billing.db'),
entities: allEntities,
synchronize: true,
};
},
}),
AuthModule,
RbacModule,
StudentsModule,
RoomsModule,
OccupanciesModule,
ExpensesModule,
BillsModule,
DashboardModule,
OperationLogsModule,
DepositsModule,
ClassroomsModule,
TenantsModule,
ClassroomRentalsModule,
],
providers: [
{ provide: APP_GUARD, useClass: ThrottlerGuard },
{ provide: APP_GUARD, useClass: PermissionGuard },
],
})
export class AppModule {}