from datetime import datetime from typing import List, Optional from pydantic import UUID4, BaseModel class LogSchema(BaseModel): id: int date_created: datetime user_request: Optional[str] = None qe_result: Optional[str] = None search_result: Optional[str] = None llm_result: Optional[str] = None llm_settings: Optional[str] = None user_name: Optional[str] = None chat_id: Optional[str] = None error: Optional[str] = None class LogCreateSchema(BaseModel): user_request: Optional[str] = None qe_result: Optional[str] = None search_result: Optional[str] = None llm_result: Optional[str] = None llm_settings: Optional[str] = None user_name: Optional[str] = None error: Optional[str] = None chat_id: Optional[str] = None class SortParam(BaseModel): field: str direction: str # "asc" | "desc" class LogFilterSchema(BaseModel): user_name: Optional[str] = None chat_id: Optional[str] = None date_from: Optional[datetime] = None date_to: Optional[datetime] = None page: int = 1 # Номер страницы, по умолчанию 1 page_size: int = 50 # Размер страницы, по умолчанию 50 sort: Optional[List[SortParam]] = None # Список параметров сортировки class Config: json_schema_extra = { "example": { "user_name": "demo", "date_from": "2024-01-01T00:00:00", "date_to": "2026-12-31T23:59:59", "page": 1, "page_size": 50, "sort": [ {"field": "date_created", "direction": "desc"} ] } } class PaginatedLogResponse(BaseModel): data: List[LogSchema] total: int page: int page_size: int total_pages: int