114 lines
3.8 KiB
Python
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}
|