/** * @file 统一错误码定义 * @author AI助手 * @date 2025-06-29 * @description 定义整个应用的统一错误码,提供类型安全的错误处理 */ /** * 应用错误码枚举 * @description 统一管理所有错误码,确保错误处理的一致性 */ export const ERROR_CODES = { // 成功 SUCCESS: 'SUCCESS', // 客户端错误 4xx VALIDATION_ERROR: 'VALIDATION_ERROR', // 参数验证失败 UNAUTHORIZED: 'UNAUTHORIZED', // 未授权 FORBIDDEN: 'FORBIDDEN', // 禁止访问 NOT_FOUND: 'NOT_FOUND', // 资源不存在 METHOD_NOT_ALLOWED: 'METHOD_NOT_ALLOWED', // 方法不允许 CONFLICT: 'CONFLICT', // 资源冲突 RATE_LIMIT_EXCEEDED: 'RATE_LIMIT_EXCEEDED', // 请求频率超限 // 业务错误 4xx BUSINESS_ERROR: 'BUSINESS_ERROR', // 通用业务错误 USER_NOT_FOUND: 'USER_NOT_FOUND', // 用户不存在 USER_ALREADY_EXISTS: 'USER_ALREADY_EXISTS', // 用户已存在 INVALID_CREDENTIALS: 'INVALID_CREDENTIALS', // 凭据无效 TOKEN_EXPIRED: 'TOKEN_EXPIRED', // Token过期 TOKEN_INVALID: 'TOKEN_INVALID', // Token无效 INSUFFICIENT_PERMISSIONS: 'INSUFFICIENT_PERMISSIONS', // 权限不足 // 用户注册相关错误 USERNAME_EXISTS: 'USERNAME_EXISTS', // 用户名已存在 EMAIL_EXISTS: 'EMAIL_EXISTS', // 邮箱已存在 PASSWORD_MISMATCH: 'PASSWORD_MISMATCH', // 密码不匹配 CAPTCHA_ERROR: 'CAPTCHA_ERROR', // 验证码错误 EMAIL_SEND_FAILED: 'EMAIL_SEND_FAILED', // 邮件发送失败 // 用户激活相关错误 INVALID_ACTIVATION_TOKEN: 'INVALID_ACTIVATION_TOKEN', // 激活令牌无效 ALREADY_ACTIVATED: 'ALREADY_ACTIVATED', // 已经激活 // 用户登录相关错误 INVALID_PASSWORD: 'INVALID_PASSWORD', // 密码错误 ACCOUNT_NOT_ACTIVATED: 'ACCOUNT_NOT_ACTIVATED', // 账号未激活 ACCOUNT_LOCKED: 'ACCOUNT_LOCKED', // 账号被锁定 TOO_MANY_FAILED_ATTEMPTS: 'TOO_MANY_FAILED_ATTEMPTS', // 失败次数过多 // 密码重置相关错误 INVALID_RESET_TOKEN: 'INVALID_RESET_TOKEN', // 重置令牌无效 // 系统状态 NOT_IMPLEMENTED: 'NOT_IMPLEMENTED', // 功能未实现 // 服务器错误 5xx INTERNAL_ERROR: 'INTERNAL_ERROR', // 内部服务器错误 DATABASE_ERROR: 'DATABASE_ERROR', // 数据库错误 REDIS_ERROR: 'REDIS_ERROR', // Redis错误 EXTERNAL_API_ERROR: 'EXTERNAL_API_ERROR', // 外部API错误 SERVICE_UNAVAILABLE: 'SERVICE_UNAVAILABLE', // 服务不可用 } as const; /** * 错误码类型 */ export type ErrorCode = typeof ERROR_CODES[keyof typeof ERROR_CODES]; /** * 错误码到HTTP状态码的映射 */ export const ERROR_CODE_TO_HTTP_STATUS: Record = { // 成功 [ERROR_CODES.SUCCESS]: 200, // 客户端错误 4xx [ERROR_CODES.VALIDATION_ERROR]: 400, [ERROR_CODES.UNAUTHORIZED]: 401, [ERROR_CODES.FORBIDDEN]: 403, [ERROR_CODES.NOT_FOUND]: 404, [ERROR_CODES.METHOD_NOT_ALLOWED]: 405, [ERROR_CODES.CONFLICT]: 409, [ERROR_CODES.RATE_LIMIT_EXCEEDED]: 429, // 业务错误 4xx [ERROR_CODES.BUSINESS_ERROR]: 400, [ERROR_CODES.USER_NOT_FOUND]: 404, [ERROR_CODES.USER_ALREADY_EXISTS]: 409, [ERROR_CODES.INVALID_CREDENTIALS]: 401, [ERROR_CODES.TOKEN_EXPIRED]: 401, [ERROR_CODES.TOKEN_INVALID]: 401, [ERROR_CODES.INSUFFICIENT_PERMISSIONS]: 403, // 用户注册相关错误 [ERROR_CODES.USERNAME_EXISTS]: 409, [ERROR_CODES.EMAIL_EXISTS]: 409, [ERROR_CODES.PASSWORD_MISMATCH]: 400, [ERROR_CODES.CAPTCHA_ERROR]: 400, [ERROR_CODES.EMAIL_SEND_FAILED]: 500, // 用户激活相关错误 [ERROR_CODES.INVALID_ACTIVATION_TOKEN]: 400, [ERROR_CODES.ALREADY_ACTIVATED]: 409, // 用户登录相关错误 [ERROR_CODES.INVALID_PASSWORD]: 401, [ERROR_CODES.ACCOUNT_NOT_ACTIVATED]: 403, [ERROR_CODES.ACCOUNT_LOCKED]: 403, [ERROR_CODES.TOO_MANY_FAILED_ATTEMPTS]: 429, // 密码重置相关错误 [ERROR_CODES.INVALID_RESET_TOKEN]: 400, // 系统状态 [ERROR_CODES.NOT_IMPLEMENTED]: 501, // 服务器错误 5xx [ERROR_CODES.INTERNAL_ERROR]: 500, [ERROR_CODES.DATABASE_ERROR]: 500, [ERROR_CODES.REDIS_ERROR]: 500, [ERROR_CODES.EXTERNAL_API_ERROR]: 502, [ERROR_CODES.SERVICE_UNAVAILABLE]: 503, }; /** * 错误码描述映射 */ export const ERROR_CODE_MESSAGES: Record = { // 成功 [ERROR_CODES.SUCCESS]: '操作成功', // 客户端错误 [ERROR_CODES.VALIDATION_ERROR]: '请求参数验证失败', [ERROR_CODES.UNAUTHORIZED]: '未授权访问', [ERROR_CODES.FORBIDDEN]: '禁止访问', [ERROR_CODES.NOT_FOUND]: '请求的资源不存在', [ERROR_CODES.METHOD_NOT_ALLOWED]: '请求方法不被允许', [ERROR_CODES.CONFLICT]: '请求与当前资源状态冲突', [ERROR_CODES.RATE_LIMIT_EXCEEDED]: '请求频率超过限制', // 业务错误 [ERROR_CODES.BUSINESS_ERROR]: '业务处理失败', [ERROR_CODES.USER_NOT_FOUND]: '用户不存在', [ERROR_CODES.USER_ALREADY_EXISTS]: '用户已存在', [ERROR_CODES.INVALID_CREDENTIALS]: '用户名或密码错误', [ERROR_CODES.TOKEN_EXPIRED]: '访问令牌已过期', [ERROR_CODES.TOKEN_INVALID]: '访问令牌无效', [ERROR_CODES.INSUFFICIENT_PERMISSIONS]: '权限不足', // 用户注册相关错误 [ERROR_CODES.USERNAME_EXISTS]: '用户名已存在', [ERROR_CODES.EMAIL_EXISTS]: '邮箱已被注册', [ERROR_CODES.PASSWORD_MISMATCH]: '两次输入的密码不一致', [ERROR_CODES.CAPTCHA_ERROR]: '验证码错误或已过期', [ERROR_CODES.EMAIL_SEND_FAILED]: '邮件发送失败', // 用户激活相关错误 [ERROR_CODES.INVALID_ACTIVATION_TOKEN]: '激活令牌无效或已过期', [ERROR_CODES.ALREADY_ACTIVATED]: '账号已经激活', // 用户登录相关错误 [ERROR_CODES.INVALID_PASSWORD]: '密码错误', [ERROR_CODES.ACCOUNT_NOT_ACTIVATED]: '账号未激活', [ERROR_CODES.ACCOUNT_LOCKED]: '账号已被锁定', [ERROR_CODES.TOO_MANY_FAILED_ATTEMPTS]: '登录失败次数过多', // 密码重置相关错误 [ERROR_CODES.INVALID_RESET_TOKEN]: '重置令牌无效或已过期', // 系统状态 [ERROR_CODES.NOT_IMPLEMENTED]: '功能未实现', // 服务器错误 [ERROR_CODES.INTERNAL_ERROR]: '服务器内部错误', [ERROR_CODES.DATABASE_ERROR]: '数据库操作失败', [ERROR_CODES.REDIS_ERROR]: 'Redis操作失败', [ERROR_CODES.EXTERNAL_API_ERROR]: '外部服务调用失败', [ERROR_CODES.SERVICE_UNAVAILABLE]: '服务暂时不可用', };