357ba27499
- 两张表 + Alembic 迁移:coupon_prompt_engagement(device×日,弹窗频控源)/ coupon_claim_record(device×券×日,领券记录·资产) - coupon/step 透传顺手写库:step0 写 engagement(claim_started);响应解析 last_coupon_result/coupon_results 幂等写 claim record(按 coupon_id 去重,避免 done 帧 last 与 coupon_results 重复在 autoflush=False 下撞唯一约束回滚整批) - 新增 GET /coupon/prompt/should-show(弹窗判据)+ POST /coupon/prompt/dismiss(拒绝通知,透传链路看不到拒绝) - 判断按 device_id(券发到设备登录的外卖账号,比 user 更贴近登录环境);user_id 仅资产留痕、可空 - MVP 先不去重(队列照旧全发);pricebot 未改 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Reviewed-on: #23
22 lines
645 B
Python
22 lines
645 B
Python
"""领券今日状态端点的收发模型。"""
|
|
from __future__ import annotations
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class CouponPromptDismissIn(BaseModel):
|
|
"""客户端拒绝/关闭领券引导窗的通知体。
|
|
|
|
server 据此记一条今日 engagement(dismissed)→ 今天这台设备不再弹引导窗。
|
|
MVP 不鉴权,按 device_id 判断;user_id 登录态带上就一并记(资产),可空。
|
|
"""
|
|
|
|
device_id: str
|
|
user_id: int | None = None
|
|
|
|
|
|
class CouponPromptShouldShowOut(BaseModel):
|
|
"""切到外卖 App 时是否还应弹领券引导窗。今天已 engage(领或拒)过 → false。"""
|
|
|
|
should_show: bool
|