39 lines
952 B
Python
39 lines
952 B
Python
from typing import Optional
|
|
|
|
from fastapi import APIRouter, Depends, Query
|
|
from sqlmodel import Session, col, func, select
|
|
|
|
from app.database import get_session
|
|
from app.models import AuditLog
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/audit")
|
|
def list_audit(
|
|
page: int = Query(1, ge=1),
|
|
per_page: int = Query(50, ge=1, le=200),
|
|
action: Optional[str] = None,
|
|
session: Session = Depends(get_session),
|
|
):
|
|
query = select(AuditLog)
|
|
|
|
if action:
|
|
query = query.where(AuditLog.action == action)
|
|
|
|
count_query = select(func.count()).select_from(query.subquery())
|
|
total = session.exec(count_query).one()
|
|
|
|
query = query.order_by(col(AuditLog.ts).desc())
|
|
offset = (page - 1) * per_page
|
|
query = query.offset(offset).limit(per_page)
|
|
|
|
logs = session.exec(query).all()
|
|
|
|
return {
|
|
"items": [log.model_dump() for log in logs],
|
|
"total": total,
|
|
"page": page,
|
|
"per_page": per_page,
|
|
}
|