Files
gamegroup/src/app.module.ts
UGREEN USER 575a29ac8f chore: 代码风格统一和项目文档添加
主要变更:

1. 代码风格统一
   - 统一使用双引号替代单引号
   - 保持项目代码风格一致性
   - 涵盖所有模块、配置、实体和服务文件

2. 项目文档
   - 新增 SECURITY_FIXES_SUMMARY.md - 安全修复总结文档
   - 新增 项目问题评估报告.md - 项目问题评估文档

3. 包含修改的文件类别
   - 配置文件:app, database, jwt, redis, cache, performance
   - 实体文件:所有 TypeORM 实体
   - 模块文件:所有业务模块
   - 公共模块:guards, decorators, interceptors, filters, utils
   - 测试文件:单元测试和 E2E 测试

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-28 13:03:28 +08:00

137 lines
4.0 KiB
TypeScript

import { Module } from "@nestjs/common";
import { ConfigModule, ConfigService } from "@nestjs/config";
import { TypeOrmModule } from "@nestjs/typeorm";
import { ScheduleModule } from "@nestjs/schedule";
import { APP_GUARD } from "@nestjs/core";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
import { ThrottlerModule, ThrottlerGuard } from "@nestjs/throttler";
// 公共模块
import { CommonModule } from "./common/common.module";
// 配置文件
import appConfig from "./config/app.config";
import databaseConfig from "./config/database.config";
import jwtConfig from "./config/jwt.config";
import redisConfig from "./config/redis.config";
import cacheConfig from "./config/cache.config";
import performanceConfig from "./config/performance.config";
// 业务模块
import { AuthModule } from "./modules/auth/auth.module";
import { UsersModule } from "./modules/users/users.module";
import { GroupsModule } from "./modules/groups/groups.module";
import { GamesModule } from "./modules/games/games.module";
import { AppointmentsModule } from "./modules/appointments/appointments.module";
import { LedgersModule } from "./modules/ledgers/ledgers.module";
import { SchedulesModule } from "./modules/schedules/schedules.module";
import { BlacklistModule } from "./modules/blacklist/blacklist.module";
import { HonorsModule } from "./modules/honors/honors.module";
import { AssetsModule } from "./modules/assets/assets.module";
import { PointsModule } from "./modules/points/points.module";
import { BetsModule } from "./modules/bets/bets.module";
// 守卫
import { JwtAuthGuard } from "./common/guards/jwt-auth.guard";
import { RolesGuard } from "./common/guards/roles.guard";
@Module({
imports: [
// 配置模块
ConfigModule.forRoot({
isGlobal: true,
load: [
appConfig,
databaseConfig,
jwtConfig,
redisConfig,
cacheConfig,
performanceConfig,
],
envFilePath: [
`.env.${process.env.NODE_ENV || "development"}`,
".env.local",
".env",
],
}),
// 速率限制模块(防止暴力破解)
ThrottlerModule.forRoot([
{
name: "short",
ttl: 1000, // 1秒
limit: 3, // 允许3次请求
},
{
name: "medium",
ttl: 10000, // 10秒
limit: 20, // 允许20次请求
},
{
name: "long",
ttl: 60000, // 1分钟
limit: 100, // 允许100次请求
},
]),
// 数据库模块
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
useFactory: (configService: ConfigService) => ({
type: "mysql",
host: configService.get("database.host"),
port: configService.get("database.port"),
username: configService.get("database.username"),
password: configService.get("database.password"),
database: configService.get("database.database"),
entities: [__dirname + "/**/*.entity{.ts,.js}"],
synchronize: configService.get("database.synchronize"),
logging: configService.get("database.logging"),
timezone: "+08:00",
charset: "utf8mb4",
}),
inject: [ConfigService],
}),
// 定时任务模块
ScheduleModule.forRoot(),
// 公共模块
CommonModule,
// 业务模块
AuthModule,
UsersModule,
GroupsModule,
GamesModule,
AppointmentsModule,
LedgersModule,
SchedulesModule,
BlacklistModule,
HonorsModule,
AssetsModule,
PointsModule,
BetsModule,
],
controllers: [AppController],
providers: [
AppService,
// 全局守卫
{
provide: APP_GUARD,
useClass: JwtAuthGuard,
},
{
provide: APP_GUARD,
useClass: RolesGuard,
},
// 速率限制守卫
{
provide: APP_GUARD,
useClass: ThrottlerGuard,
},
],
})
export class AppModule {}