"""审计日志装饰器。 自动记录 CREATE/UPDATE/DELETE 操作。 """ import functools import logging from datetime import datetime, timezone from sqlalchemy.ext.asyncio import AsyncSession from app.models.audit import AuditLog logger = logging.getLogger(__name__) async def log_audit( db: AsyncSession, user_id: str, action: str, target_type: str, target_id: str, detail: dict | None = None, tenant_id: str | None = None, ) -> None: """记录审计日志。 Args: db: 数据库会话 user_id: 操作用户 ID action: 操作类型(login/view/create/update/delete/export/ai_call) target_type: 资源类型(映射到 resource_type 字段) target_id: 资源 ID(映射到 resource_id 字段) detail: 操作详情字典 tenant_id: 租户 ID """ audit = AuditLog( tenant_id=tenant_id or "", user_id=user_id, action=action, resource_type=target_type, resource_id=target_id, detail_json=detail, created_at=datetime.now(timezone.utc), ) db.add(audit) await db.flush()