"""Audit log endpoint.""" from fastapi import APIRouter, Depends, Query from sqlmodel import Session, select, col from ten31portal.auth import require_audit_reader from ten31portal.database import get_session from ten31portal.models import AuditLog, User from ten31portal.schemas import AuditLogResponse router = APIRouter(prefix="/api/audit", tags=["audit"]) @router.get("") def list_audit( object_type: str | None = None, object_id: int | None = None, page: int = Query(default=1, ge=1), per_page: int = Query(default=50, ge=1, le=200), user: User = Depends(require_audit_reader), session: Session = Depends(get_session), ) -> list[AuditLogResponse]: stmt = select(AuditLog) if object_type is not None: stmt = stmt.where(AuditLog.object_type == object_type) if object_id is not None: stmt = stmt.where(AuditLog.object_id == object_id) stmt = stmt.order_by(col(AuditLog.id).desc()) stmt = stmt.offset((page - 1) * per_page).limit(per_page) rows = session.exec(stmt).all() return [AuditLogResponse.model_validate(r, from_attributes=True) for r in rows]