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>
38 lines
1.7 KiB
Python
38 lines
1.7 KiB
Python
"""CPS 推广群(cps_group)。
|
|
|
|
每个微信群一条记录,`sid` 是美团联盟二级渠道追踪位(get_referral_link / query_order
|
|
共用):发券时塞进推广链接,订单回来按 sid 归群对账。美团限制 sid 仅字母+数字 ≤64。
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import JSON, DateTime, Integer, String, func
|
|
from sqlalchemy.dialects.postgresql import JSONB
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from app.db.base import Base
|
|
|
|
|
|
class CpsGroup(Base):
|
|
__tablename__ = "cps_group"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
|
# 渠道标识。仅美团需要(sid 追踪);纯淘宝/京东群无 sid(那俩不支持)。含美团时建群分配。
|
|
sid: Mapped[str | None] = mapped_column(String(64), unique=True, index=True, nullable=True)
|
|
name: Mapped[str] = mapped_column(String(128), nullable=False)
|
|
# 该群发哪些平台的券(多选): ["meituan","taobao","jd"]。含 meituan 才需要 sid。
|
|
platforms: Mapped[list] = mapped_column(
|
|
JSON().with_variant(JSONB(), "postgresql"), nullable=False, default=list
|
|
)
|
|
# 群人数,运营填,作转化率分母(可空)。
|
|
member_count: Mapped[int | None] = mapped_column(Integer, 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"<CpsGroup id={self.id} sid={self.sid!r} name={self.name!r}>"
|