Files
PecHub/backend/app/schemas/fascicolo.py
T

114 lines
3.8 KiB
Python

"""
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}
# ─── Scadenzario fascicoli ────────────────────────────────────────────────────
class FascicoloDeadlineResponse(BaseModel):
"""Fascicolo con scadenza per lo scadenzario pratiche."""
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_at: datetime
updated_at: datetime
message_count: int = 0
is_overdue: bool = False
model_config = {"from_attributes": True}