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 CampaignVideo(AssetMixin, Base): __tablename__ = "meta_campaign_video" id: Mapped[str] = mapped_column(primary_key=True, default=uuid_string) campaign_id: Mapped[str] = mapped_column( sa.Text, sa.ForeignKey("meta_campaign.id"), name="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] 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="videos")