ThreadHouse / app /audit.py
paudelapil's picture
Project do-over
65fa0c5
Raw
History Blame Contribute Delete
708 Bytes
import json
from typing import Any, Optional
import asyncpg
async def audit(
conn: asyncpg.Connection,
actor_id: Optional[int],
action: str,
target: Optional[str] = None,
detail: Optional[dict[str, Any]] = None,
actor_email: Optional[str] = None,
) -> None:
try:
await conn.execute(
"""
INSERT INTO audit_log (actor_id, actor_email, action, target, detail)
VALUES ($1, $2, $3, $4, $5::jsonb)
""",
actor_id,
actor_email,
action,
target,
json.dumps(detail or {}),
)
except Exception:
# Never let logging break the actual operation
pass