""" Schemi Pydantic per Fascicolo (fascicolazione pratiche). """ import uuid from datetime import datetime from typing import Optional from pydantic import BaseModel, Field # ─── Schemi base ────────────────────────────────────────────────────────────── class FascicoloCreate(BaseModel): titolo: str = Field(..., min_length=1, max_length=255) numero_pratica: Optional[str] = Field(None, max_length=100) stato: Optional[str] = Field("aperto", pattern=r"^(aperto|chiuso|archiviato)$") categoria: Optional[str] = Field(None, max_length=100) responsabile_id: Optional[uuid.UUID] = None scadenza: Optional[datetime] = None note: Optional[str] = None class FascicoloUpdate(BaseModel): titolo: Optional[str] = Field(None, min_length=1, max_length=255) numero_pratica: Optional[str] = Field(None, max_length=100) stato: Optional[str] = Field(None, pattern=r"^(aperto|chiuso|archiviato)$") categoria: Optional[str] = Field(None, max_length=100) responsabile_id: Optional[uuid.UUID] = None scadenza: Optional[datetime] = None note: Optional[str] = None class FascicoloResponse(BaseModel): id: uuid.UUID tenant_id: uuid.UUID titolo: str numero_pratica: Optional[str] = None stato: str categoria: Optional[str] = None responsabile_id: Optional[uuid.UUID] = None scadenza: Optional[datetime] = None note: Optional[str] = None created_by: Optional[uuid.UUID] = None created_at: datetime updated_at: datetime message_count: int = 0 model_config = {"from_attributes": True} # ─── Messaggi nel fascicolo ─────────────────────────────────────────────────── class FascicoloMessageItem(BaseModel): """Riepilogo di un messaggio nel fascicolo.""" id: uuid.UUID subject: Optional[str] = None from_address: Optional[str] = None to_addresses: Optional[list[str]] = None direction: str pec_type: str state: str mailbox_id: uuid.UUID received_at: Optional[datetime] = None sent_at: Optional[datetime] = None created_at: datetime added_at: datetime model_config = {"from_attributes": True} # ─── Operazioni sui messaggi del fascicolo ──────────────────────────────────── class FascicoloAddMessagesRequest(BaseModel): message_ids: list[uuid.UUID] = Field(..., min_length=1) class FascicoloRemoveMessagesRequest(BaseModel): message_ids: list[uuid.UUID] = Field(..., min_length=1) # ─── Lista fascicoli di un messaggio ───────────────────────────────────────── class MessageFascicoloSummary(BaseModel): """Fascicolo sintetico per la vista nel dettaglio messaggio.""" id: uuid.UUID titolo: str numero_pratica: Optional[str] = None stato: str categoria: Optional[str] = None model_config = {"from_attributes": True}