/** * 用户模块常量定义 * * 功能描述: * - 定义用户模块中使用的常量值 * - 避免魔法数字,提高代码可维护性 * - 集中管理配置参数 * * 职责分离: * - 常量定义:用户角色、字段限制、查询限制等常量值 * - 错误消息:统一的错误消息定义和管理 * - 工具类:性能监控和验证工具的封装 * * 最近修改: * - 2026-01-15: 代码规范优化 - 补充职责分离描述 (修改者: moyin) * - 2026-01-09: 代码质量优化 - 提取魔法数字为常量定义 (修改者: moyin) * * @author moyin * @version 1.0.1 * @since 2026-01-09 * @lastModified 2026-01-15 */ import { ValidationError } from 'class-validator'; /** * 用户角色常量 */ export const USER_ROLES = { /** 普通用户角色 */ NORMAL_USER: 1, /** 管理员角色 */ ADMIN: 9 } as const; /** * 字段长度限制常量 */ export const FIELD_LIMITS = { /** 用户名最大长度 */ USERNAME_MAX_LENGTH: 50, /** 昵称最大长度 */ NICKNAME_MAX_LENGTH: 50, /** 邮箱最大长度 */ EMAIL_MAX_LENGTH: 100, /** 手机号最大长度 */ PHONE_MAX_LENGTH: 30, /** GitHub ID最大长度 */ GITHUB_ID_MAX_LENGTH: 100, /** 头像URL最大长度 */ AVATAR_URL_MAX_LENGTH: 255, /** 密码哈希最大长度 */ PASSWORD_HASH_MAX_LENGTH: 255, /** 用户状态最大长度 */ STATUS_MAX_LENGTH: 20 } as const; /** * 查询限制常量 */ export const QUERY_LIMITS = { /** 默认查询限制 */ DEFAULT_LIMIT: 100, /** 默认搜索限制 */ DEFAULT_SEARCH_LIMIT: 20, /** 最大查询限制 */ MAX_LIMIT: 1000 } as const; /** * 系统配置常量 */ export const SYSTEM_CONFIG = { /** ID生成超时时间(毫秒) */ ID_GENERATION_TIMEOUT: 5000, /** 锁等待间隔(毫秒) */ LOCK_WAIT_INTERVAL: 1 } as const; /** * 数据库常量 */ export const DATABASE_CONSTANTS = { /** 排序方向 */ ORDER_DESC: 'DESC' as const, ORDER_ASC: 'ASC' as const, /** 数据库默认值 */ CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP' as const, /** 锁键名 */ ID_GENERATION_LOCK_KEY: 'id_generation' as const } as const; /** * 测试常量 */ export const TEST_CONSTANTS = { /** 测试用的不存在用户ID */ NON_EXISTENT_USER_ID: 99999, /** 测试用的无效角色 */ INVALID_ROLE: 999, /** 测试用的用户名长度限制 */ USERNAME_LENGTH_LIMIT: 51, /** 测试用的批量操作数量 */ BATCH_TEST_SIZE: 50, /** 测试用的性能测试数量 */ PERFORMANCE_TEST_SIZE: 50, /** 测试用的分页大小 */ TEST_PAGE_SIZE: 20, /** 测试用的查询偏移量 */ TEST_OFFSET: 10 } as const; /** * 错误消息常量 */ export const ERROR_MESSAGES = { /** 用户创建失败 */ USER_CREATE_FAILED: '用户创建失败,请稍后重试', /** 用户更新失败 */ USER_UPDATE_FAILED: '用户更新失败,请稍后重试', /** 用户删除失败 */ USER_DELETE_FAILED: '用户删除失败,请稍后重试', /** 用户不存在 */ USER_NOT_FOUND: '用户不存在', /** 数据验证失败 */ VALIDATION_FAILED: '数据验证失败', /** ID生成超时 */ ID_GENERATION_TIMEOUT: 'ID生成超时,可能存在死锁', /** 用户名已存在 */ USERNAME_EXISTS: '用户名已存在', /** 邮箱已存在 */ EMAIL_EXISTS: '邮箱已存在', /** 手机号已存在 */ PHONE_EXISTS: '手机号已存在', /** GitHub ID已存在 */ GITHUB_ID_EXISTS: 'GitHub ID已存在' } as const; /** * 性能监控工具类 */ export class PerformanceMonitor { private startTime: number; constructor() { this.startTime = Date.now(); } /** * 获取执行时长 * @returns 执行时长(毫秒) */ getDuration(): number { return Date.now() - this.startTime; } /** * 重置计时器 */ reset(): void { this.startTime = Date.now(); } /** * 创建新的性能监控实例 * @returns 性能监控实例 */ static create(): PerformanceMonitor { return new PerformanceMonitor(); } } /** * 验证工具类 */ export class ValidationUtils { /** * 格式化验证错误消息 * * @param validationErrors 验证错误数组 * @returns 格式化后的错误消息字符串 */ static formatValidationErrors(validationErrors: ValidationError[]): string { return validationErrors.map(error => Object.values(error.constraints || {}).join(', ') ).join('; '); } }