范围: src/core/db/users/ - base_users.service.ts: 为保护方法补充@example示例 - users.constants.ts: 补充职责分离描述 检查人员: moyin 检查日期: 2026-01-15
188 lines
4.4 KiB
TypeScript
188 lines
4.4 KiB
TypeScript
/**
|
||
* 用户模块常量定义
|
||
*
|
||
* 功能描述:
|
||
* - 定义用户模块中使用的常量值
|
||
* - 避免魔法数字,提高代码可维护性
|
||
* - 集中管理配置参数
|
||
*
|
||
* 职责分离:
|
||
* - 常量定义:用户角色、字段限制、查询限制等常量值
|
||
* - 错误消息:统一的错误消息定义和管理
|
||
* - 工具类:性能监控和验证工具的封装
|
||
*
|
||
* 最近修改:
|
||
* - 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('; ');
|
||
}
|
||
} |