GapFill Flowee
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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."""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user