from datetime import datetime import sqlalchemy as sa from audience_common import datetimeutc from audience_common.auth.account import Account from sqlalchemy.orm import Mapped, mapped_column, relationship from campaigns.connectors.db.orm import Base from campaigns.utils.uuid import uuid_string from .facebook_page import FacebookPage class FacebookPageLabel(Base): __tablename__ = "facebook_page_label" __table_args__ = ( sa.Index( "facebook_page_label_page_id_vendor_id_subaccount_id_uindex", "page_id", "vendor_id", "subaccount_id", unique=True, postgresql_where="subaccount_id IS NOT NULL", ), sa.Index( "facebook_page_label_page_id_vendor_id_uindex", "page_id", "vendor_id", unique=True, postgresql_where="subaccount_id IS NULL", ), ) id: Mapped[str] = mapped_column(primary_key=True, default=uuid_string) page_id: Mapped[str] = mapped_column(sa.ForeignKey("facebook_page.id")) vendor_id: Mapped[int] subaccount_id: Mapped[int] created_at: Mapped[datetime] = mapped_column(default=datetimeutc.now) # relations page: Mapped[FacebookPage] = relationship(back_populates="labels", lazy="raise") @property def account(self) -> Account: return Account(vendor_id=self.vendor_id, subaccount_id=self.subaccount_id) @account.setter def account(self, val: Account) -> None: self.vendor_id = val.vendor_id self.subaccount_id = val.subaccount_id