"""Access log model for tracking user actions.""" from datetime import datetime from typing import Optional from sqlalchemy import BigInteger, DateTime, ForeignKey, Index, Integer, JSON, String, func from sqlalchemy.orm import Mapped, mapped_column from database import Base class AccessLog(Base): __tablename__ = "access_logs" id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True) user_id: Mapped[Optional[int]] = mapped_column( Integer, ForeignKey("users.id"), nullable=True ) action: Mapped[str] = mapped_column(String(100), nullable=False, index=True) details: Mapped[Optional[dict]] = mapped_column(JSON, nullable=True) ip_address: Mapped[Optional[str]] = mapped_column(String(45), nullable=True) user_agent: Mapped[Optional[str]] = mapped_column(String(500), nullable=True) created_at: Mapped[datetime] = mapped_column( DateTime, nullable=False, server_default=func.now() ) __table_args__ = ( Index("ix_access_log_user_time", "user_id", "created_at"), {"mysql_engine": "InnoDB", "mysql_charset": "utf8mb4"}, ) def __repr__(self) -> str: return f""