import { AuditParamsContext } from '../services/audit-context.service'; export declare const AUDIT_ACTION_METADATA = "AUDIT_ACTION_METADATA"; /** * 审计动作选项 */ export interface AuditActionOptions { /** * 操作模板键(可选) * @example 'order.create' */ templateKey?: string; /** * 参数构建器,用于从请求和实体变更中提取描述参数 * @param context - 包含 req, result, error, entityChanges 的上下文 * @returns 描述参数对象 * * @example * paramsBuilder: (context) => { * const order = context.findEntity('Order', 'CREATE'); * const items = context.findEntities('OrderItem', 'CREATE'); * return { * 'order.sn': order?.newValue.orderSn, * 'product.count': items.length, * 'receiver': order?.newValue.receiverName, * }; * } */ paramsBuilder?: (context: AuditParamsContext) => Record; /** * 是否启用审计(默认 true) */ enabled?: boolean; /** * 扩展元数据 */ metadata?: Record; } /** * 审计动作装饰器元数据 */ export interface AuditActionMetadata { actionName: string; options: AuditActionOptions; } /** * 审计动作装饰器 * 用于在控制器方法上标记审计动作,自动收集该请求中的所有实体变更 * * @param actionName - 操作名称,如 'createOrder', 'cancelOrder' * @param options - 审计动作选项 * * @example * ```typescript * @Post() * @AuditAction('createOrder', { * templateKey: 'order.create', * paramsBuilder: (context) => { * const order = context.findEntity('Order', 'CREATE'); * const items = context.findEntities('OrderItem', 'CREATE'); * return { * 'order.sn': order?.newValue.orderSn, * 'product.count': items.length, * 'product.names': items.map(i => i.metadata?.productName).join('、'), * 'receiver': order?.newValue.receiverName, * 'totalAmount': order?.newValue.totalAmount, * }; * } * }) * async createOrder(@Body() dto: CreateOrderDto) { * return await this.orderService.create(dto); * } * ``` */ export declare function AuditAction(actionName: string, options?: AuditActionOptions): MethodDecorator;