/**
 * 用户模块
 *
 * 功能描述：
 * - 整合用户相关的实体、服务和控制器
 * - 配置TypeORM实体和Repository
 * - 支持数据库和内存存储的动态切换
 * - 导出用户服务供其他模块使用
 *
 * 职责分离：
 * - 模块配置：动态模块的创建和依赖注入配置
 * - 存储切换：数据库模式和内存模式的灵活切换
 * - 服务导出：统一的服务接口导出和类型安全
 * - 依赖管理：模块间依赖关系的清晰定义
 *
 * 存储模式：
 * - 数据库模式：使用TypeORM连接MySQL数据库
 * - 内存模式：使用Map存储，适用于开发和测试
 *
 * 最近修改：
 * - 2026-01-07: 代码规范优化 - 完善注释规范，添加完整的文件头和方法注释
 * - 2025-12-17: 功能新增 - 添加双存储模式支持，by angjustinl
 *
 * @author moyin
 * @version 1.0.1
 * @since 2025-12-17
 * @lastModified 2026-01-07
 */

import { Module, DynamicModule, Global } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Users } from './users.entity';
import { UsersService } from './users.service';
import { UsersMemoryService } from './users_memory.service';

@Global()
@Module({})
export class UsersModule {
  /**
   * 创建数据库模式的用户模块
   *
   * @returns 配置了TypeORM的动态模块
   */
  static forDatabase(): DynamicModule {
    return {
      module: UsersModule,
      imports: [TypeOrmModule.forFeature([Users])],
      providers: [
        {
          provide: 'UsersService',
          useClass: UsersService,
        },
      ],
      exports: ['UsersService', TypeOrmModule],
    };
  }

  /**
   * 创建内存模式的用户模块
   *
   * @returns 配置了内存存储的动态模块
   */
  static forMemory(): DynamicModule {
    return {
      module: UsersModule,
      providers: [
        {
          provide: 'UsersService',
          useClass: UsersMemoryService,
        },
      ],
      exports: ['UsersService'],
    };
  }
}