mirror of
https://github.com/idrainformatica/PecFlow.git
synced 2026-06-16 20:55:41 +02:00
128 lines
3.7 KiB
Python
128 lines
3.7 KiB
Python
"""
|
|
Schema Pydantic per le Virtual Box.
|
|
"""
|
|
|
|
import uuid
|
|
from datetime import datetime
|
|
from typing import Literal
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
# ─── VirtualBoxRule ───────────────────────────────────────────────────────────
|
|
|
|
VBoxField = Literal["mailbox_id", "imap_folder", "subject", "from_address", "to_address"]
|
|
VBoxOperator = Literal["contains", "equals", "starts_with", "ends_with", "regex"]
|
|
|
|
|
|
class VirtualBoxRuleCreate(BaseModel):
|
|
field: VBoxField
|
|
operator: VBoxOperator = "contains"
|
|
value: str = Field(..., min_length=1)
|
|
date_from: str | None = None # YYYY-MM-DD
|
|
date_to: str | None = None # YYYY-MM-DD
|
|
|
|
|
|
class VirtualBoxRuleResponse(BaseModel):
|
|
id: uuid.UUID
|
|
virtual_box_id: uuid.UUID
|
|
field: str
|
|
operator: str
|
|
value: str
|
|
date_from: str | None
|
|
date_to: str | None
|
|
created_at: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
# ─── Mailbox breve (usata nella risposta VirtualBox) ─────────────────────────
|
|
|
|
class MailboxBriefResponse(BaseModel):
|
|
id: uuid.UUID
|
|
email_address: str
|
|
display_name: str | None
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
# ─── VirtualBox ───────────────────────────────────────────────────────────────
|
|
|
|
class VirtualBoxCreate(BaseModel):
|
|
name: str = Field(..., min_length=1, max_length=255)
|
|
description: str | None = None
|
|
label: str | None = None
|
|
rules: list[VirtualBoxRuleCreate] = []
|
|
mailbox_ids: list[uuid.UUID] = Field(
|
|
default=[],
|
|
description="ID delle caselle PEC reali a cui è associata questa Virtual Box",
|
|
)
|
|
|
|
|
|
class VirtualBoxUpdate(BaseModel):
|
|
name: str | None = None
|
|
description: str | None = None
|
|
label: str | None = None
|
|
is_active: bool | None = None
|
|
mailbox_ids: list[uuid.UUID] | None = Field(
|
|
default=None,
|
|
description="Se fornito, sostituisce completamente la lista di caselle associate",
|
|
)
|
|
|
|
|
|
class VirtualBoxResponse(BaseModel):
|
|
id: uuid.UUID
|
|
tenant_id: uuid.UUID
|
|
name: str
|
|
description: str | None
|
|
label: str | None
|
|
is_active: bool
|
|
created_by: uuid.UUID | None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
rules: list[VirtualBoxRuleResponse] = []
|
|
assignment_count: int = 0
|
|
mailboxes: list[MailboxBriefResponse] = []
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class VirtualBoxListResponse(BaseModel):
|
|
items: list[VirtualBoxResponse]
|
|
total: int
|
|
page: int
|
|
page_size: int
|
|
|
|
|
|
# ─── VirtualBoxAssignment ─────────────────────────────────────────────────────
|
|
|
|
class VirtualBoxAssignRequest(BaseModel):
|
|
user_ids: list[uuid.UUID] = Field(..., min_length=1)
|
|
|
|
|
|
class VirtualBoxAssignmentResponse(BaseModel):
|
|
id: uuid.UUID
|
|
virtual_box_id: uuid.UUID
|
|
user_id: uuid.UUID
|
|
assigned_by: uuid.UUID | None
|
|
assigned_at: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class AssignedUserResponse(BaseModel):
|
|
user_id: uuid.UUID
|
|
user_email: str
|
|
user_full_name: str
|
|
assigned_at: datetime
|
|
|
|
|
|
# ─── Gestione caselle associate ───────────────────────────────────────────────
|
|
|
|
class VirtualBoxMailboxAssignRequest(BaseModel):
|
|
mailbox_ids: list[uuid.UUID] = Field(
|
|
...,
|
|
min_length=1,
|
|
description="Lista degli ID delle caselle PEC da associare",
|
|
)
|