from datetime import datetime import sqlalchemy as sa from audience_common import datetimeutc from sqlalchemy.orm import Mapped, mapped_column, relationship from campaigns.assets.mixins import AssetMixin from campaigns.connectors.db.orm import Base from campaigns.connectors.db.sqltypes import ChoiceType from campaigns.meta.enums import AssetPositionGroup from campaigns.utils.uuid import uuid_string from .campaign import Campaign class CampaignImage(AssetMixin, Base): __tablename__ = "meta_campaign_image" id: Mapped[str] = mapped_column(primary_key=True, default=uuid_string) campaign_id: Mapped[str] = mapped_column( "meta_campaign_id", sa.ForeignKey("meta_campaign.id") ) position_group: Mapped[AssetPositionGroup] = mapped_column( ChoiceType(AssetPositionGroup) ) external_id: Mapped[str | None] external_ad_creative_id: Mapped[str | None] external_status: Mapped[str | None] image_hash: Mapped[str | None] created_at: Mapped[datetime] = mapped_column(default=datetimeutc.now) updated_at: Mapped[datetime] = mapped_column( default=datetimeutc.now, onupdate=datetimeutc.now, ) # relations campaign: Mapped[Campaign] = relationship(back_populates="images")