Files
whale-town-end/src/core/db/users/users.constants.ts
moyin e54d5e3939 style(users): 优化Core层users模块代码规范
范围: src/core/db/users/
- base_users.service.ts: 为保护方法补充@example示例
- users.constants.ts: 补充职责分离描述

检查人员: moyin
检查日期: 2026-01-15
2026-01-15 13:38:36 +08:00

188 lines
4.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 用户模块常量定义
*
* 功能描述:
* - 定义用户模块中使用的常量值
* - 避免魔法数字,提高代码可维护性
* - 集中管理配置参数
*
* 职责分离:
* - 常量定义:用户角色、字段限制、查询限制等常量值
* - 错误消息:统一的错误消息定义和管理
* - 工具类:性能监控和验证工具的封装
*
* 最近修改:
* - 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('; ');
}
}