mirror of
https://github.com/idrainformatica/PecFlow.git
synced 2026-06-16 12:45:42 +02:00
fase 5 fix
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
"""
|
||||
Schemi Pydantic per Message, Attachment e operazioni correlate.
|
||||
"""
|
||||
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, model_validator
|
||||
|
||||
|
||||
class AttachmentResponse(BaseModel):
|
||||
id: uuid.UUID
|
||||
message_id: uuid.UUID
|
||||
filename: str
|
||||
content_type: Optional[str] = None
|
||||
size_bytes: Optional[int] = None
|
||||
storage_path: str
|
||||
checksum_sha256: Optional[str] = None
|
||||
created_at: datetime
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class MessageResponse(BaseModel):
|
||||
id: uuid.UUID
|
||||
tenant_id: uuid.UUID
|
||||
mailbox_id: uuid.UUID
|
||||
message_id_header: Optional[str] = None
|
||||
imap_uid: Optional[int] = None
|
||||
imap_folder: str
|
||||
direction: str
|
||||
pec_type: str
|
||||
state: str
|
||||
subject: Optional[str] = None
|
||||
from_address: Optional[str] = None
|
||||
to_addresses: list[str] = []
|
||||
cc_addresses: list[str] = []
|
||||
sent_at: Optional[datetime] = None
|
||||
received_at: Optional[datetime] = None
|
||||
size_bytes: Optional[int] = None
|
||||
body_text: Optional[str] = None
|
||||
body_html: Optional[str] = None
|
||||
has_attachments: bool = False
|
||||
parent_message_id: Optional[uuid.UUID] = None
|
||||
is_read: bool = False
|
||||
is_starred: bool = False
|
||||
is_archived: bool = False
|
||||
archived_at: Optional[datetime] = None
|
||||
raw_eml_path: Optional[str] = None
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
@model_validator(mode="before")
|
||||
@classmethod
|
||||
def coerce_arrays(cls, data: object) -> object:
|
||||
"""Normalizza i campi array a liste vuote se None (da ORM)."""
|
||||
if hasattr(data, "__dict__"):
|
||||
# ORM object
|
||||
for field in ("to_addresses", "cc_addresses"):
|
||||
val = getattr(data, field, None)
|
||||
if val is None:
|
||||
object.__setattr__(data, field, [])
|
||||
elif isinstance(data, dict):
|
||||
for field in ("to_addresses", "cc_addresses"):
|
||||
if data.get(field) is None:
|
||||
data[field] = []
|
||||
return data
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class MessageListResponse(BaseModel):
|
||||
items: list[MessageResponse]
|
||||
total: int
|
||||
page: int
|
||||
page_size: int
|
||||
|
||||
|
||||
class MessageUpdateRequest(BaseModel):
|
||||
is_read: Optional[bool] = None
|
||||
is_starred: Optional[bool] = None
|
||||
is_archived: Optional[bool] = None
|
||||
Reference in New Issue
Block a user