a2270ee1b2
新手引导视频:运营后台上传 MP4(上限 100MB,魔数校验只认 ISO BMFF), App 端在领券等候浮层前 N 次以引导视频替代广告。新增 guide_video 的 model/schema/repository/router(App 侧 + 后台侧)与播放记录表迁移。 美团券:首页「销量最高 / 智能推荐」两个 tab 改游标分页,配套两条 (city_id, dedup_key, 排序键 DESC) 复合索引,让 Postgres 顺着索引流式 去重,免掉每翻一页重排整城券的开销。美团 CPS client 在 lifespan 预热 并在关闭时释放连接池。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
"""新手引导视频(领券等候浮层前 N 次替代广告)的客户端请求/响应契约。"""
|
|
from __future__ import annotations
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class GuideVideoStartIn(BaseModel):
|
|
"""开播询问。scene 目前只有 coupon(领券浮层);预留给日后比价等场景。"""
|
|
|
|
scene: str = Field(default="coupon", max_length=16)
|
|
|
|
|
|
class GuideVideoStartOut(BaseModel):
|
|
"""should_play=False 时客户端照旧走广告链路,其余字段无意义。"""
|
|
|
|
should_play: bool
|
|
video_url: str | None = None # 相对地址 /media/...;客户端自行拼 BASE_URL
|
|
play_token: str = "" # 发奖幂等键
|
|
reward_coin: int = 0 # 播完/中途关闭都发的固定金币
|
|
seq: int = 0 # 本账号第几次
|
|
remaining: int = 0 # 发完这次还剩几次
|
|
|
|
|
|
class GuideVideoRewardIn(BaseModel):
|
|
"""播完或中途关闭都调这个;completed 只做留痕,两者都发币。"""
|
|
|
|
play_token: str = Field(min_length=1, max_length=64)
|
|
completed: bool = False
|
|
|
|
|
|
class GuideVideoRewardOut(BaseModel):
|
|
"""granted=True 表示本次调用真的入账(重复上报为 False,coin 是已发金额)。"""
|
|
|
|
granted: bool
|
|
coin: int
|
|
status: str
|