from datetime import datetime from uuid import UUID from pydantic import BaseModel class AuditLogResponse(BaseModel): id: UUID trace_id: UUID actor_user_id: UUID | None actor_type: str # Enriched server-side from identity_persons via LEFT JOIN so the # frontend can render with avatar + tooltip instead of # raw UUIDs. Both fields stay None for system-actor rows. actor_display_name: str | None = None actor_email: str | None = None actor_employee_no: str | None = None actor_employment_status: str | None = None action: str resource_type: str | None resource_id: str | None status: str detail: dict | None ip_address: str | None user_agent: str | None created_at: datetime model_config = {"from_attributes": True} class AuditLogBrief(BaseModel): id: UUID trace_id: UUID action: str resource_type: str | None status: str created_at: datetime model_config = {"from_attributes": True} class ActionBreakdown(BaseModel): action: str count: int class ResourceTypeBreakdown(BaseModel): resource_type: str count: int class StatusBreakdown(BaseModel): status: str count: int class AuditStatsResponse(BaseModel): total_logs: int logs_today: int unique_actors: int by_action: list[ActionBreakdown] by_resource_type: list[ResourceTypeBreakdown] by_status: list[StatusBreakdown] recent_activity: list[AuditLogBrief]