78d970f420
- 新表 coupon_session(一次领券一行,trace_id 唯一):POST /api/v1/coupon/session 两段 upsert(发起 started / 收尾 completed·failed·abandoned),记全程耗时、各平台耗时、 机型/ROM、app_env、trace_url、origin_package(发起来源)。 - admin GET /admin/api/coupon-data:发起/完成数 + 平均耗时 + P5/P50/P95/P99(Python 算分位, SQLite 无 percentile)+ 按天/小时趋势 + 明细分页 + join 用户手机号/昵称,app_env 默认 prod; 另加 GET /admin/api/coupon-data/user-records 供「点手机号看该用户全部领券」抽屉。 - 迁移拆 3 个:建表 coupon_session_table + trace_url 加列 + origin_package 加列 (建表迁移已被某环境应用后改它不重跑,故新列单独加列迁移)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: zzhyyyyy <2685922758@qq.com> Reviewed-on: #99 Co-authored-by: zhuzihao <zhuzihao@wonderable.ai> Co-committed-by: zhuzihao <zhuzihao@wonderable.ai>
33 lines
1.1 KiB
Python
33 lines
1.1 KiB
Python
"""coupon_session 加 origin_package 列(发起来源 App 包名 → admin「发起平台」)
|
|
|
|
null=App 内(傻瓜比价首页)发起,非空=从美团/淘宝/京东弹券发起。与 trace_url 同理单独成迁移,
|
|
已建表环境靠它补列、全新环境顺序应用,不重复加列。
|
|
|
|
Revision ID: coupon_session_origin_package
|
|
Revises: coupon_session_trace_url
|
|
Create Date: 2026-06-30 00:00:00.000000
|
|
|
|
"""
|
|
|
|
from collections.abc import Sequence
|
|
|
|
import sqlalchemy as sa
|
|
|
|
from alembic import op
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision: str = "coupon_session_origin_package"
|
|
down_revision: str | Sequence[str] | None = "coupon_session_trace_url"
|
|
branch_labels: str | Sequence[str] | None = None
|
|
depends_on: str | Sequence[str] | None = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
with op.batch_alter_table("coupon_session", schema=None) as batch_op:
|
|
batch_op.add_column(sa.Column("origin_package", sa.String(length=64), nullable=True))
|
|
|
|
|
|
def downgrade() -> None:
|
|
with op.batch_alter_table("coupon_session", schema=None) as batch_op:
|
|
batch_op.drop_column("origin_package")
|