First commit
This commit is contained in:
77
api/app/schemas.py
Normal file
77
api/app/schemas.py
Normal file
@@ -0,0 +1,77 @@
|
||||
"""
|
||||
Schémas Pydantic pour la validation et la sérialisation des données
|
||||
"""
|
||||
|
||||
from typing import Optional, Dict, Any, List
|
||||
from pydantic import BaseModel, Field
|
||||
from enum import Enum
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class JobStatus(str, Enum):
|
||||
"""Statuts possibles pour une tâche d'extraction"""
|
||||
PENDING = "pending"
|
||||
PROCESSING = "processing"
|
||||
COMPLETED = "completed"
|
||||
FAILED = "failed"
|
||||
|
||||
|
||||
class UploadResponse(BaseModel):
|
||||
"""Réponse à une demande d'upload d'image"""
|
||||
job_id: str = Field(..., description="Identifiant unique de la tâche")
|
||||
status: JobStatus = Field(default=JobStatus.PENDING, description="Statut de la tâche")
|
||||
message: str = Field(default="Image en file d'attente pour traitement", description="Message d'information")
|
||||
created_at: datetime = Field(default_factory=datetime.now, description="Date de création de la tâche")
|
||||
|
||||
|
||||
class JobStatusResponse(BaseModel):
|
||||
"""Réponse à une demande de statut de tâche"""
|
||||
job_id: str = Field(..., description="Identifiant unique de la tâche")
|
||||
status: JobStatus = Field(..., description="Statut de la tâche")
|
||||
message: str = Field(..., description="Message d'information")
|
||||
created_at: datetime = Field(..., description="Date de création de la tâche")
|
||||
updated_at: Optional[datetime] = Field(None, description="Date de dernière mise à jour")
|
||||
progress: Optional[int] = Field(None, description="Progression en pourcentage (0-100)")
|
||||
queue_position: Optional[int] = Field(None, description="Position dans la file d'attente")
|
||||
|
||||
|
||||
class ExtractionResult(BaseModel):
|
||||
"""Résultat de l'extraction d'informations d'un chèque"""
|
||||
montant: Optional[str] = Field(None, description="Montant du chèque")
|
||||
date: Optional[str] = Field(None, description="Date du chèque")
|
||||
beneficiaire: Optional[str] = Field(None, description="Bénéficiaire du chèque")
|
||||
numero_cheque: Optional[str] = Field(None, description="Numéro du chèque")
|
||||
qualite_extraction: Optional[str] = Field(None, description="Qualité de l'extraction (échec, faible, moyenne, bonne)")
|
||||
image_zones: Optional[str] = Field(None, description="Chemin vers l'image avec les zones identifiées")
|
||||
|
||||
|
||||
class JobResult(BaseModel):
|
||||
"""Résultat complet d'une tâche d'extraction"""
|
||||
job_id: str = Field(..., description="Identifiant unique de la tâche")
|
||||
status: JobStatus = Field(..., description="Statut de la tâche")
|
||||
created_at: datetime = Field(..., description="Date de création de la tâche")
|
||||
completed_at: Optional[datetime] = Field(None, description="Date de complétion de la tâche")
|
||||
image_path: str = Field(..., description="Chemin de l'image originale")
|
||||
result: Optional[ExtractionResult] = Field(None, description="Résultats de l'extraction")
|
||||
texte_brut: Optional[str] = Field(None, description="Texte brut extrait (si disponible)")
|
||||
methode: str = Field(..., description="Méthode utilisée (ocr ou cv)")
|
||||
erreur: Optional[str] = Field(None, description="Message d'erreur (si échec)")
|
||||
|
||||
|
||||
class HealthCheck(BaseModel):
|
||||
"""Réponse du health check"""
|
||||
status: str = Field(default="ok", description="Statut du service")
|
||||
version: str = Field(..., description="Version de l'API")
|
||||
timestamp: datetime = Field(default_factory=datetime.now, description="Horodatage de la vérification")
|
||||
redis_status: str = Field(..., description="Statut de la connexion Redis")
|
||||
worker_count: int = Field(..., description="Nombre de workers disponibles")
|
||||
queue_size: int = Field(..., description="Nombre de tâches en attente")
|
||||
uptime: str = Field(..., description="Temps de fonctionnement du service")
|
||||
|
||||
|
||||
class ErrorResponse(BaseModel):
|
||||
"""Réponse en cas d'erreur"""
|
||||
status: str = Field(default="error", description="Statut de la réponse")
|
||||
message: str = Field(..., description="Message d'erreur")
|
||||
error_code: Optional[str] = Field(None, description="Code d'erreur")
|
||||
details: Optional[Dict[str, Any]] = Field(None, description="Détails supplémentaires")
|
||||
Reference in New Issue
Block a user