import { ClsService } from 'nestjs-cls'; import { AuditContext } from '../interfaces'; import { AuditOperation } from '../enums'; /** * 实体变更详情 */ export interface EntityChangeDetail { entityType: string; entityId: string; operation: AuditOperation; oldValue: Record; newValue: Record; changedFields: string[]; sequence: number; changeDetails?: Array<{ fieldName: string; fieldLabel?: Record; oldValue: any; newValue: any; displayOldValue?: Record; displayNewValue?: Record; changeType: string; }>; metadata?: Record; } /** * 审计参数上下文 */ export interface AuditParamsContext { req: any; result?: any; error?: Error; entityChanges: EntityChangeDetail[]; findEntity(entityType: string, operation?: AuditOperation): EntityChangeDetail | null; findEntities(entityType: string, operation?: AuditOperation): EntityChangeDetail[]; countEntities(entityType: string, operation?: AuditOperation): number; extractParams(mapping: Record): Record; extractByPath(path: string): any; extractByConfig(config: any): any; } /** * 审计动作上下文 */ export interface AuditActionContext { actionId: string; actionName: string; operationTemplateKey?: string; descriptionParams?: Record; paramsBuilder?: (context: AuditParamsContext) => Record; startTime: Date; entityChanges: Array<{ entityType: string; entityId: string; operation: string; sequence: number; }>; detailedChanges: EntityChangeDetail[]; req?: any; result?: any; error?: Error; } /** * 审计上下文服务 */ export declare class AuditContextService { private readonly cls; constructor(cls: ClsService); /** * 获取当前上下文 */ getCurrentContext(): Promise; /** * 设置上下文 */ setContext(context: Partial): void; /** * 清除上下文 */ clearContext(): void; /** * 获取默认上下文 */ private getDefaultContext; /** * 获取当前审计动作上下文 */ getCurrentActionContext(): AuditActionContext | null; /** * 设置审计动作上下文 */ setActionContext(context: AuditActionContext): void; /** * 清除审计动作上下文 */ clearActionContext(): void; /** * 记录实体变化到当前动作(简单版本) */ recordEntityChangeInAction(entityType: string, entityId: string, operation: string): void; /** * 记录详细的实体变化 */ recordDetailedEntityChange(entityType: string, entityId: string, operation: AuditOperation, oldValue: Record, newValue: Record, changedFields: string[], metadata?: Record): void; /** * 获取当前动作内的序号 */ getSequenceInAction(): number; /** * 生成审计动作ID */ generateActionId(): string; /** * 构建审计参数上下文 */ buildParamsContext(): AuditParamsContext | null; }