File size: 4,526 Bytes
8b10e33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
"""
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)