Files
gamegroup/src/app.module.ts

137 lines
4.0 KiB
TypeScript
Raw Permalink Normal View History

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 {}