Files

30 lines
829 B
Python

"""Admin-visible change history."""
from __future__ import annotations
import json
from fastapi import APIRouter, Depends, Request
from ..auth import Ctx
from ..deps import get_ctx
router = APIRouter()
@router.get("/v1/audit")
def get_audit(request: Request, ctx: Ctx = Depends(get_ctx), limit: int = 100, since: str | None = None):
ctx.require_admin(request)
q = "SELECT id, actor, action, detail_json, created_at FROM audit_log"
params: list = []
if since:
q += " WHERE created_at >= %s"
params.append(since)
q += " ORDER BY id DESC LIMIT %s"
params.append(max(1, min(limit, 500)))
events = []
for r in ctx.conn.execute(q, params).fetchall():
d = dict(r)
d["detail"] = json.loads(d.pop("detail_json"))
events.append(d)
return {"events": events}