forked from datawhale/whale-town-end
* **新增 Zulip 模块**:包含完整的集成服务,涵盖客户端池(client pool)、会话管理及事件处理。 * **新增 WebSocket 网关**:用于处理 Zulip 的实时事件监听与双向通信。 * **新增安全服务**:支持 API 密钥加密存储及凭据的安全管理。 * **新增配置管理服务**:支持配置热加载(hot-reload),实现动态配置更新。 * **新增错误处理与监控服务**:提升系统的可靠性与可观测性。 * **新增消息过滤服务**:用于内容校验及速率限制(流控)。 * **新增流初始化与会话清理服务**:优化资源管理与回收。 * **完善测试覆盖**:包含单元测试及端到端(e2e)集成测试。 * **完善详细文档**:包括 API 参考手册、配置指南及集成概述。 * **新增地图配置系统**:实现游戏地点与 Zulip Stream(频道)及 Topic(话题)的逻辑映射。 * **新增环境变量配置**:涵盖 Zulip 服务器地址、身份验证及监控相关设置。 * **更新 App 模块**:注册并启用新的 Zulip 集成模块。 * **更新 Redis 接口**:以支持增强型的会话管理功能。 * **实现 WebSocket 协议支持**:确保与 Zulip 之间的实时双向通信。
71 lines
2.2 KiB
TypeScript
71 lines
2.2 KiB
TypeScript
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 {}
|