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>
62 lines
2.4 KiB
Python
62 lines
2.4 KiB
Python
"""cps v2: 活动 payload(淘口令/京东链接) + 群多平台/sid 可空 + 点击 event_type
|
|
|
|
Revision ID: cps_v2_platforms
|
|
Revises: cps_link_tables
|
|
Create Date: 2026-06-17 11:00:00.000000
|
|
|
|
接入淘宝/京东:
|
|
- cps_activity.payload 淘宝整段淘口令文本 / 京东推广链接(美团仍用 act_id)
|
|
- cps_group.platforms 该群发哪些平台(多选);sid 改可空(纯淘宝/京东无 sid)
|
|
- cps_link.sid 可空 + target_url 加长(淘口令较长)
|
|
- cps_click.event_type visit / copy(淘宝落地页"复制口令")
|
|
"""
|
|
from typing import Sequence, Union
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
from sqlalchemy.dialects import postgresql
|
|
|
|
|
|
revision: str = "cps_v2_platforms"
|
|
down_revision: Union[str, Sequence[str], None] = "cps_link_tables"
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
depends_on: Union[str, Sequence[str], None] = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
# 活动:淘宝淘口令 / 京东链接
|
|
op.add_column("cps_activity", sa.Column("payload", sa.Text(), nullable=True))
|
|
|
|
# 群:多平台(现有群都是美团,server_default 回填)+ sid 可空
|
|
op.add_column(
|
|
"cps_group",
|
|
sa.Column(
|
|
"platforms",
|
|
sa.JSON().with_variant(postgresql.JSONB(), "postgresql"),
|
|
nullable=False,
|
|
server_default=sa.text("'[\"meituan\"]'::jsonb"),
|
|
),
|
|
)
|
|
op.alter_column("cps_group", "sid", existing_type=sa.String(64), nullable=True)
|
|
|
|
# link:sid 可空 + target 加长
|
|
op.alter_column("cps_link", "sid", existing_type=sa.String(64), nullable=True)
|
|
op.alter_column("cps_link", "target_url", existing_type=sa.String(1024), type_=sa.String(2048))
|
|
|
|
# click:sid 可空 + 事件类型
|
|
op.alter_column("cps_click", "sid", existing_type=sa.String(64), nullable=True)
|
|
op.add_column(
|
|
"cps_click",
|
|
sa.Column("event_type", sa.String(16), nullable=False, server_default="visit"),
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_column("cps_click", "event_type")
|
|
op.alter_column("cps_click", "sid", existing_type=sa.String(64), nullable=False)
|
|
op.alter_column("cps_link", "target_url", existing_type=sa.String(2048), type_=sa.String(1024))
|
|
op.alter_column("cps_link", "sid", existing_type=sa.String(64), nullable=False)
|
|
op.drop_column("cps_group", "platforms")
|
|
op.alter_column("cps_group", "sid", existing_type=sa.String(64), nullable=False)
|
|
op.drop_column("cps_activity", "payload")
|