import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { TypeOrmModule } from '@nestjs/typeorm'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { LoggerModule } from './core/utils/logger/logger.module'; import { UsersModule } from './core/db/users/users.module'; import { LoginCoreModule } from './core/login_core/login_core.module'; import { LoginModule } from './business/login/login.module'; import { ZulipModule } from './business/zulip/zulip.module'; import { RedisModule } from './core/redis/redis.module'; /** * 检查数据库配置是否完整 by angjustinl 2025-12-17 * * @returns 是否配置了数据库 */ function isDatabaseConfigured(): boolean { const requiredEnvVars = ['DB_HOST', 'DB_PORT', 'DB_USERNAME', 'DB_PASSWORD', 'DB_NAME']; return requiredEnvVars.every(varName => process.env[varName]); } /** * 应用主模块 * * 功能描述: * - 整合所有功能模块 * - 配置全局服务和中间件 * - 支持数据库和内存存储的自动切换 * * 存储模式选择: * - 如果配置了数据库环境变量,使用数据库模式 * - 如果未配置数据库,自动回退到内存模式 * - 内存模式适用于快速开发和测试 */ @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, envFilePath: '.env', }), LoggerModule, RedisModule, // 条件导入TypeORM模块 ...(isDatabaseConfigured() ? [ TypeOrmModule.forRoot({ type: 'mysql', host: process.env.DB_HOST, port: parseInt(process.env.DB_PORT), username: process.env.DB_USERNAME, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, entities: [__dirname + '/**/*.entity{.ts,.js}'], synchronize: false, // 添加连接超时和重试配置 connectTimeout: 10000, retryAttempts: 3, retryDelay: 3000, }), ] : []), // 根据数据库配置选择用户模块模式 isDatabaseConfigured() ? UsersModule.forDatabase() : UsersModule.forMemory(), LoginCoreModule, LoginModule, ZulipModule, ], controllers: [AppController], providers: [AppService], }) export class AppModule {}