""" Response models para para.AI API v3.0 Define estrutura de responses para todos os endpoints """ from typing import Optional, Dict, List, Any from datetime import datetime from pydantic import BaseModel, Field from enum import Enum # ============================================================================ # ENUMS # ============================================================================ class ProcessingStatus(str, Enum): """Status de processamento.""" PENDING = "pending" PROCESSING = "processing" COMPLETED = "completed" ERROR = "error" CANCELLED = "cancelled" # ============================================================================ # HEALTH & STATUS # ============================================================================ class HealthResponse(BaseModel): """Response do health check.""" status: str = Field(..., description="Status geral (healthy/degraded/unhealthy)") version: str = Field(..., description="Versão da API") environment: str = Field(..., description="Ambiente (production/development)") timestamp: datetime = Field(..., description="Timestamp do check") uptime_seconds: float = Field(..., description="Tempo de uptime em segundos") services: Dict[str, bool] = Field(default_factory=dict, description="Status dos serviços") metrics: Dict[str, Any] = Field(default_factory=dict, description="Métricas do sistema") # ============================================================================ # PROCESSING # ============================================================================ class ProcessingResponse(BaseModel): """Response de processamento.""" task_id: str = Field(..., description="ID único da task") status: ProcessingStatus = Field(..., description="Status atual") message: str = Field(..., description="Mensagem descritiva") total_records: int = Field(default=0, description="Total de registros") processed_records: int = Field(default=0, description="Registros processados") failed_records: int = Field(default=0, description="Registros com falha") started_at: Optional[datetime] = Field(default=None, description="Início do processamento") completed_at: Optional[datetime] = Field(default=None, description="Fim do processamento") download_url: Optional[str] = Field(default=None, description="URL para download") errors: List[str] = Field(default_factory=list, description="Lista de erros") result_metadata: Optional[Dict[str, Any]] = Field(default=None, description="Metadados do resultado") class FileInfoResponse(BaseModel): """Informações sobre arquivo.""" filename: str = Field(..., description="Nome do arquivo") size_bytes: int = Field(..., description="Tamanho em bytes") hash_sha256: str = Field(..., description="Hash SHA256") created_at: datetime = Field(..., description="Data de criação") # ============================================================================ # DEBUG & INFO # ============================================================================ class SystemInfoResponse(BaseModel): """Informações do sistema.""" python_version: str environment: str debug_mode: bool paths: Dict[str, str] llm_config: Dict[str, Any] database: Dict[str, Any] class LLMTestResponse(BaseModel): """Response de teste de LLM.""" provider: str model: str success: bool response: Optional[str] = None tokens_used: Optional[int] = None duration_ms: float error: Optional[str] = None class ProcessorTestResponse(BaseModel): """Response de teste de processador.""" processor_name: str success: bool result: Optional[Dict[str, Any]] = None duration_ms: float error: Optional[str] = None class DatabaseStatsResponse(BaseModel): """Estatísticas do banco de dados.""" total_acordaos: int total_tribunais: int total_usuarios: int total_decisoes: int database_size_mb: Optional[float] = None # ============================================================================ # GENERIC # ============================================================================ class MessageResponse(BaseModel): """Response genérica com mensagem.""" message: str details: Optional[Dict[str, Any]] = None class ErrorResponse(BaseModel): """Response de erro.""" error: str message: str details: Optional[Dict[str, Any]] = None timestamp: datetime = Field(default_factory=datetime.now)