"""CPS 可推广活动池(cps_activity)。 运营预存常推的活动(券),生成链接时选它,省得每次记 actId。当前只接美团: `act_id` = 美团联盟「我要推广-活动推广」第一列的物料 ID。`platform` 预留,接 淘宝/京东时复用本表(各自的活动标识)。 """ from __future__ import annotations from datetime import datetime from sqlalchemy import DateTime, Integer, String, Text, func from sqlalchemy.orm import Mapped, mapped_column from app.db.base import Base class CpsActivity(Base): __tablename__ = "cps_activity" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) platform: Mapped[str] = mapped_column(String(20), nullable=False, default="meituan") # meituan|taobao|jd name: Mapped[str] = mapped_column(String(128), nullable=False) # 美团活动物料 ID(actId);淘宝/京东接入后存各自活动标识。 act_id: Mapped[str | None] = mapped_column(String(64), nullable=True) # 美团商品券 productViewSign(与 act_id 二选一转链;多数活动用 act_id)。 product_view_sign: Mapped[str | None] = mapped_column(String(128), nullable=True) # 淘宝:整段淘口令文本(落地页原样复制);京东:推广链接(落地页 302 跳)。美团不用这个(用 act_id)。 payload: Mapped[str | None] = mapped_column(Text, nullable=True) status: Mapped[str] = mapped_column(String(20), nullable=False, default="active") # active | archived remark: Mapped[str | None] = mapped_column(String(256), nullable=True) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), nullable=False ) def __repr__(self) -> str: # pragma: no cover return f""