Files
Ten31-Portal/backend/ten31portal/routers/audit_router.py
T

32 lines
1.1 KiB
Python

"""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]