from datetime import datetime from sqlalchemy import DateTime, Integer, JSON, String from sqlalchemy.orm import Mapped, mapped_column from app.db.base import Base class AuditLog(Base): """审计日志模型:记录关键接口和安全相关元数据。""" __tablename__ = "audit_logs" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) user_id: Mapped[str | None] = mapped_column(String(128), index=True, comment="Django用户中心ID") tenant_id: Mapped[str | None] = mapped_column(String(128)) session_id: Mapped[int | None] = mapped_column(Integer, index=True) action: Mapped[str] = mapped_column(String(64), nullable=False, index=True) resource_type: Mapped[str] = mapped_column(String(64), nullable=False) resource_id: Mapped[str | None] = mapped_column(String(128)) request_id: Mapped[str | None] = mapped_column(String(128)) ip_address: Mapped[str | None] = mapped_column(String(64)) user_agent: Mapped[str | None] = mapped_column(String(512)) metadata_: Mapped[dict | None] = mapped_column("metadata", JSON) created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, index=True)