from __future__ import annotations from datetime import datetime from typing import TYPE_CHECKING from audience_common import datetimeutc from sqlalchemy.orm import Mapped, mapped_column, relationship from campaigns.connectors.db.orm import Base from campaigns.connectors.db.sqltypes import EncryptedTextType from campaigns.core.types import EncryptedToken from campaigns.utils.uuid import uuid_string if TYPE_CHECKING: from .facebook_page import FacebookPage class FacebookAssociation(Base): __tablename__ = "facebook_association" id: Mapped[str] = mapped_column(primary_key=True, default=uuid_string) user_id: Mapped[str] user_name: Mapped[str] = mapped_column(default="") orchard_identity_id: Mapped[str] = mapped_column(unique=True) token: Mapped[EncryptedToken] = mapped_column(EncryptedTextType) is_connected: Mapped[bool] = mapped_column(default=True) expires_at: Mapped[datetime] created_at: Mapped[datetime] = mapped_column(default=datetimeutc.now) updated_at: Mapped[datetime] = mapped_column( default=datetimeutc.now, onupdate=datetimeutc.now ) # relation pages: Mapped[list[FacebookPage]] = relationship( back_populates="association", lazy="raise" ) @property def is_expired(self) -> bool: return self.expires_at < datetimeutc.now()