You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
orquestrador/admin_app/api/routes/audit.py

40 lines
1.4 KiB
Python

from fastapi import APIRouter, Depends
from admin_app.api.dependencies import get_audit_service, require_admin_permission
from admin_app.api.schemas import AdminAuditEntryResponse, AdminAuditListResponse
from admin_app.core import AuthenticatedStaffPrincipal
from admin_app.services import AuditService
from shared.contracts import AdminPermission
# login/logout da API admin.
router = APIRouter(prefix="/audit", tags=["audit"])
@router.get("/events", response_model=AdminAuditListResponse)
def list_audit_events(
audit_service: AuditService = Depends(get_audit_service),
_: AuthenticatedStaffPrincipal = Depends(
require_admin_permission(AdminPermission.VIEW_AUDIT_LOGS)
),
):
events = audit_service.list_recent(limit=50)
return AdminAuditListResponse(
service="orquestrador-admin",
events=[
AdminAuditEntryResponse(
id=event.id,
actor_staff_account_id=event.actor_staff_account_id,
event_type=event.event_type,
resource_type=event.resource_type,
resource_id=event.resource_id,
outcome=event.outcome,
message=event.message,
payload_json=event.payload_json,
ip_address=event.ip_address,
user_agent=event.user_agent,
created_at=event.created_at,
)
for event in events
],
)