/** * 异常接口定义 * 基于 NestJS 官方示例实现 * 参考: https://docs.nestjs.cn/fundamentals/exception-filters * 对应 Java: 异常抽象 */ export interface ExceptionInterface { /** * 处理异常 * @param exception 异常对象 * @param context 上下文 * @returns 处理结果 */ handle(exception: any, context?: any): Promise; /** * 记录异常 * @param exception 异常对象 * @param context 上下文 */ log(exception: any, context?: any): Promise; /** * 格式化异常响应 * @param exception 异常对象 * @param context 上下文 * @returns 格式化后的响应 */ format(exception: any, context?: any): ExceptionResponse; /** * 判断异常类型 * @param exception 异常对象 * @returns 异常类型 */ getType(exception: any): ExceptionType; /** * 获取异常严重程度 * @param exception 异常对象 * @returns 严重程度 */ getSeverity(exception: any): ExceptionSeverity; /** * 判断是否应该记录 * @param exception 异常对象 * @returns 是否应该记录 */ shouldLog(exception: any): boolean; /** * 判断是否应该上报 * @param exception 异常对象 * @returns 是否应该上报 */ shouldReport(exception: any): boolean; } /** * 异常处理结果 */ export interface ExceptionResult { success: boolean; response: ExceptionResponse; logged: boolean; reported: boolean; handled: boolean; } /** * 异常响应 */ export interface ExceptionResponse { statusCode: number; message: string; error: string; timestamp: string; path?: string; method?: string; traceId?: string; spanId?: string; correlationId?: string; details?: any; code?: string; type?: ExceptionType; severity?: ExceptionSeverity; } /** * 异常类型 */ export enum ExceptionType { VALIDATION = 'validation', AUTHENTICATION = 'authentication', AUTHORIZATION = 'authorization', NOT_FOUND = 'not_found', CONFLICT = 'conflict', BAD_REQUEST = 'bad_request', INTERNAL_SERVER_ERROR = 'internal_server_error', SERVICE_UNAVAILABLE = 'service_unavailable', TIMEOUT = 'timeout', RATE_LIMIT = 'rate_limit', BUSINESS = 'business', SYSTEM = 'system', NETWORK = 'network', DATABASE = 'database', CACHE = 'cache', EXTERNAL_API = 'external_api', UNKNOWN = 'unknown', } /** * 异常严重程度 */ export enum ExceptionSeverity { LOW = 'low', MEDIUM = 'medium', HIGH = 'high', CRITICAL = 'critical', } /** * 异常上下文 */ export interface ExceptionContext { request?: { method: string; url: string; headers: Record; body?: any; query?: Record; params?: Record; ip?: string; userAgent?: string; userId?: string; sessionId?: string; }; response?: { statusCode: number; headers: Record; body?: any; }; user?: { id: string; username?: string; email?: string; role?: string; permissions?: string[]; }; environment?: { nodeEnv: string; version: string; hostname: string; pid: number; }; trace?: { traceId: string; spanId: string; correlationId: string; }; meta?: Record; } /** * 异常配置 */ export interface ExceptionConfig { enabled: boolean; logLevel: 'debug' | 'info' | 'warn' | 'error' | 'fatal'; reportLevel: 'error' | 'fatal'; includeStackTrace: boolean; includeRequest: boolean; includeResponse: boolean; includeUser: boolean; includeEnvironment: boolean; sanitizeData: boolean; maxMessageLength: number; maxStackTraceLength: number; rateLimit: { enabled: boolean; maxRequests: number; windowMs: number; }; reporting: { enabled: boolean; providers: string[]; filters: string[]; }; } /** * 异常装饰器选项 */ export interface ExceptionOptions { /** * 异常类型 */ type?: ExceptionType; /** * 严重程度 */ severity?: ExceptionSeverity; /** * 是否记录 */ log?: boolean; /** * 是否上报 */ report?: boolean; /** * 自定义消息 */ message?: string; /** * 状态码 */ statusCode?: number; /** * 错误码 */ code?: string; /** * 是否包含堆栈跟踪 */ includeStackTrace?: boolean; /** * 是否包含请求信息 */ includeRequest?: boolean; /** * 是否包含响应信息 */ includeResponse?: boolean; /** * 是否包含用户信息 */ includeUser?: boolean; /** * 是否包含环境信息 */ includeEnvironment?: boolean; /** * 是否清理敏感数据 */ sanitizeData?: boolean; /** * 元数据 */ meta?: Record; } /** * 异常过滤器接口 */ export interface ExceptionFilterInterface { /** * 判断是否应该处理该异常 * @param exception 异常对象 * @returns 是否应该处理 */ shouldHandle(exception: any): boolean; /** * 处理异常 * @param exception 异常对象 * @param context 上下文 * @returns 处理结果 */ handle(exception: any, context?: any): Promise; } /** * 异常上报接口 */ export interface ExceptionReporterInterface { /** * 上报异常 * @param exception 异常对象 * @param context 上下文 * @returns 上报结果 */ report(exception: any, context?: any): Promise; /** * 批量上报异常 * @param exceptions 异常数组 * @param context 上下文 * @returns 上报结果 */ reportBatch( exceptions: Array<{ exception: any; context?: any }>, ): Promise; /** * 检查是否应该上报 * @param exception 异常对象 * @returns 是否应该上报 */ shouldReport(exception: any): boolean; } /** * 异常统计接口 */ export interface ExceptionStatsInterface { /** * 记录异常统计 * @param exception 异常对象 * @param context 上下文 */ record(exception: any, context?: any): void; /** * 获取异常统计 * @param timeRange 时间范围 * @returns 统计信息 */ getStats(timeRange?: { start: Date; end: Date }): ExceptionStats; /** * 重置统计 */ reset(): void; } /** * 异常统计信息 */ export interface ExceptionStats { total: number; byType: Record; bySeverity: Record; byTime: Array<{ time: Date; count: number }>; topExceptions: Array<{ message: string; count: number; lastOccurred: Date }>; rate: number; // 异常率 trend: 'increasing' | 'decreasing' | 'stable'; }