"""审计日志模块 Repository 层 负责审计日志的创建和查询操作,记录系统中各业务模块的操作行为。 被 AuditService(审计服务)调用。 """ from datetime import datetime from sqlalchemy import select from sqlalchemy.orm import Session from backend.app.models.system import AuditLog class AuditRepository: """审计日志数据仓储 封装审计日志的写入和多条件查询操作。 被 AuditService(审计服务)调用。 """ def create_log(self, session: Session, payload: dict) -> AuditLog: """创建审计日志记录 参数: session: 数据库会话 payload: 日志数据字典,包含 biz_type / biz_id / operator_name / operate_type / operate_time / operate_content 等字段 返回: 新创建的审计日志对象 """ log = AuditLog(**payload) session.add(log) session.flush() return log def list_logs(self, session: Session, filters: dict) -> list[AuditLog]: """查询审计日志列表 支持按业务类型、业务ID、操作人、操作类型、时间范围等条件过滤, 按 id 倒序返回。 参数: session: 数据库会话 filters: 过滤条件字典,支持 biz_type / biz_id / operator_name / operate_type / start_time / end_time(格式 "%Y-%m-%d %H:%M:%S") 返回: 符合条件的审计日志列表 """ stmt = select(AuditLog) if filters.get("biz_type"): stmt = stmt.where(AuditLog.biz_type == filters["biz_type"]) if filters.get("biz_id") is not None: stmt = stmt.where(AuditLog.biz_id == filters["biz_id"]) if filters.get("operator_name"): stmt = stmt.where(AuditLog.operator_name.contains(filters["operator_name"])) if filters.get("operate_type"): stmt = stmt.where(AuditLog.operate_type == filters["operate_type"]) if filters.get("start_time"): stmt = stmt.where(AuditLog.operate_time >= datetime.strptime(filters["start_time"], "%Y-%m-%d %H:%M:%S")) if filters.get("end_time"): stmt = stmt.where(AuditLog.operate_time <= datetime.strptime(filters["end_time"], "%Y-%m-%d %H:%M:%S")) stmt = stmt.order_by(AuditLog.id.desc()) return list(session.execute(stmt).scalars())