"""Pydantic schemas for Audit Log API requests/responses.""" from datetime import datetime from typing import Optional, List, Any from pydantic import BaseModel, Field class AuditLogBase(BaseModel): """Base audit log schema.""" action: str = Field(..., max_length=50) resource_type: Optional[str] = Field(None, max_length=50) resource_id: Optional[str] = Field(None, max_length=255) details: Optional[str] = None ip_address: Optional[str] = Field(None, max_length=45) user_agent: Optional[str] = Field(None, max_length=500) status: str = Field(default="success", max_length=20) class AuditLogCreate(AuditLogBase): """Schema for creating an audit log entry.""" user_id: Optional[str] = None username: Optional[str] = None class AuditLog(AuditLogBase): """Schema for audit log response.""" id: str user_id: Optional[str] = None username: Optional[str] = None created_at: datetime class Config: from_attributes = True class AuditLogList(BaseModel): """Schema for paginated audit log list.""" items: List[AuditLog] total: int page: int page_size: int total_pages: int class AuditLogFilter(BaseModel): """Schema for filtering audit logs.""" user_id: Optional[str] = None username: Optional[str] = None action: Optional[str] = None resource_type: Optional[str] = None resource_id: Optional[str] = None status: Optional[str] = None start_date: Optional[datetime] = None end_date: Optional[datetime] = None class AuditLogStats(BaseModel): """Schema for audit log statistics.""" total_entries: int entries_today: int entries_this_week: int entries_this_month: int actions_breakdown: dict[str, int] top_users: List[dict[str, Any]] recent_failures: int