28 lines
825 B
Python
28 lines
825 B
Python
"""Audit trail API (read-only in bootstrap — append-only via services)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Optional
|
|
from uuid import UUID
|
|
|
|
from fastapi import APIRouter, Depends, Query
|
|
|
|
from asf_domain import AuditEvent
|
|
from .deps import audit_service
|
|
from ...services import AuditService
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("", response_model=list[AuditEvent], summary="List audit events (tenant scoped, newest first)")
|
|
async def list_audit(
|
|
actor_id: Optional[UUID] = Query(None),
|
|
resource_type: Optional[str] = Query(None),
|
|
limit: int = Query(100, ge=1, le=500),
|
|
offset: int = Query(0, ge=0),
|
|
svc: AuditService = Depends(audit_service),
|
|
) -> list[AuditEvent]:
|
|
return await svc.list(
|
|
limit=limit, offset=offset, actor_id=actor_id, resource_type=resource_type
|
|
)
|