3a40f617bd
- model: cps_group.platforms 多选 / cps_activity.payload(淘口令/京东链接) / cps_link.sid 可空 + 复制统计 - admin API: 群与活动平台多选、批量生成落地页短链 referral-links、对账字段可空 - 落地页 cps_redirect: 淘宝展示淘口令(记 copy 事件) / 京东 302 / 美团原逻辑 - 迁移 cps_v2_platforms: 加 platforms/payload/event_type 列, sid 放宽可空(含 downgrade) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
37 lines
1.8 KiB
Python
37 lines
1.8 KiB
Python
"""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"<CpsActivity id={self.id} platform={self.platform} name={self.name!r}>"
|