""" Modello PecContact – rubrica indirizzi PEC del tenant. """ import uuid from datetime import datetime from sqlalchemy import Boolean, DateTime, ForeignKey, Index, String, Text, UniqueConstraint, func from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column from app.database import Base class PecContact(Base): __tablename__ = "pec_contacts" id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), primary_key=True, default=uuid.uuid4 ) tenant_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("tenants.id", ondelete="CASCADE"), nullable=False ) email: Mapped[str] = mapped_column(String(255), nullable=False) name: Mapped[str | None] = mapped_column(String(255), nullable=True) organization: Mapped[str | None] = mapped_column(String(255), nullable=True) notes: Mapped[str | None] = mapped_column(Text, nullable=True) is_favorite: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False) # auto_saved=True → salvato automaticamente dalla sincronizzazione IMAP # auto_saved=False → aggiunto manualmente dall'utente auto_saved: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False) created_by: Mapped[uuid.UUID | None] = mapped_column( UUID(as_uuid=True), ForeignKey("users.id", ondelete="SET NULL"), nullable=True ) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), nullable=False, server_default=func.now() ) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), nullable=False, server_default=func.now(), onupdate=func.now() ) __table_args__ = ( UniqueConstraint("tenant_id", "email", name="uq_pec_contact_email_tenant"), Index("idx_pec_contacts_tenant", "tenant_id"), Index("idx_pec_contacts_email", "tenant_id", "email"), ) def __repr__(self) -> str: return f""