GapFill Flowee

This commit is contained in:
2026-06-18 11:24:05 +02:00
parent 64442af182
commit c68daf4313
25 changed files with 2965 additions and 48 deletions
+19
View File
@@ -19,6 +19,17 @@ class MailboxCreateRequest(BaseModel):
display_name: str | None = Field(None, max_length=255, description="Nome visualizzato")
provider: str | None = Field(None, max_length=100, description="Provider PEC (aruba, namirial...)")
# Protocollo (Feature N8 REM europea)
protocol_type: Literal["pec_it", "rem_eu"] = Field(
"pec_it",
description="Tipo protocollo: pec_it (PEC italiana, default) | rem_eu (REM europea ETSI EN 319 532-4)",
)
rem_provider: str | None = Field(
None,
max_length=100,
description="Nome provider REM europeo (es. docutel, anodet, de-mail). Solo per rem_eu.",
)
# Credenziali IMAP (in chiaro, cifrate prima della persistenza)
imap_host: str = Field(..., min_length=1, max_length=255, description="Host IMAP")
imap_port: int = Field(993, ge=1, le=65535, description="Porta IMAP")
@@ -48,6 +59,10 @@ class MailboxUpdateRequest(BaseModel):
provider: str | None = Field(None, max_length=100)
status: Literal["active", "paused"] | None = None
# Aggiornamento protocollo (Feature N8)
protocol_type: Literal["pec_it", "rem_eu"] | None = None
rem_provider: str | None = Field(None, max_length=100)
# Aggiornamento credenziali IMAP (opzionale)
imap_host: str | None = Field(None, min_length=1, max_length=255)
imap_port: int | None = Field(None, ge=1, le=65535)
@@ -84,6 +99,10 @@ class MailboxResponse(BaseModel):
smtp_port: int
smtp_use_tls: bool
# Protocollo (Feature N8)
protocol_type: str
rem_provider: str | None
# Stato sync
status: str
last_sync_at: datetime | None
+12
View File
@@ -28,6 +28,7 @@ class TenantSettingsResponse(BaseModel):
archival_mode: ArchivalMode
conservatore_id: str
conservatore_endpoint: str | None
conservatore_tenant_slug: str | None
conservatore_username_configured: bool # TRUE se la username è già salvata
conservatore_password_configured: bool # TRUE se la password è già salvata
archival_notes: str | None
@@ -56,6 +57,9 @@ class TenantSettingsUpdate(BaseModel):
# URL endpoint del conservatore (obbligatorio in produzione, ignorato in mock)
conservatore_endpoint: str | None = None
# Slug tenant sul sistema del conservatore (es. 'pechub' per Aeterna)
conservatore_tenant_slug: str | None = None
# Credenziali in chiaro: vengono cifrate prima del salvataggio.
# Valore stringa vuota ("") = cancella la credenziale.
conservatore_username: str | None = None
@@ -103,6 +107,14 @@ class IndexingJobStatus(BaseModel):
error: Optional[str] = None
class ConservatoreTestResult(BaseModel):
"""Risposta POST /settings/test-conservatore."""
success: bool
message: str
latency_ms: int | None = None
provider_info: dict | None = None
class StartReindexRequest(BaseModel):
"""Body per POST /settings/indexing/reindex."""