Files
PecHub/backend/app/schemas/virtual_box.py
T
2026-03-19 15:47:42 +01:00

129 lines
3.8 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
status: str = "active"
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",
)