Files
whale-town-end/src/core/db/users/users.constants.ts
moyin 8816b29b0a chore: 更新项目配置和核心服务
- 更新package.json和jest配置
- 更新main.ts启动配置
- 完善用户管理和数据库服务
- 更新安全核心模块
- 优化Zulip核心服务

配置改进:
- 统一项目依赖管理
- 优化测试配置
- 完善服务模块化架构
2026-01-09 17:03:57 +08:00

182 lines
4.1 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-09: 代码质量优化 - 提取魔法数字为常量定义 (修改者: moyin)
*
* @author moyin
* @version 1.0.0
* @since 2026-01-09
* @lastModified 2026-01-09
*/
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('; ');
}
}