Files
shaguabijia-app-server/docs/api/ad-reward-status.md
T
OuYingJun1024 56f4548654 feat(ad-reward): reward-status 加本轮 3 次冷却字段 (round_count + cooldown_until)
让客户端 4 态任务行 CTA (Normal/Loading/Capped/CoolingDown) 与 ExitReward
弹窗 limit note (本轮看完/今日看完 二选一) 都由后端权威派生, 跨设备 / 重装 /
杀进程都一致, 客户端不再依赖 in-memory 本地存储。

- core/rewards.py: 加 VIDEO_ROUND_REQUIRED_COUNT=3 / VIDEO_ROUND_COOLDOWN_SECONDS=600
- repositories/ad_reward.py: today_status 从 3-tuple 扩成 5-tuple,
  从已有 created_at 字段按 ORDER BY DESC + OFFSET round_count 派生最近一个
  已完成轮末尾时间; 零新字段零新表
- schemas/ad.py: AdRewardStatusOut + TestGrantOut 加 round_count + cooldown_until
- api/v1/ad.py: reward_status / test_grant 接 5-tuple
- tests: 加 4 个覆盖 (初始 / 未达一轮 / 刚达一轮进冷却 / 冷却已过)
- docs/api/ad-reward-status.md: 补字段说明 + 客户端 4 态 CTA 推导规则 +
  "冷却仅 UX, 发奖不受影响" 注解

冷却是 UX 约束: pangle-callback 发奖只看 daily_limit, 冷却期间穿山甲
回调照常发奖, 不另设拒发分支。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 13:27:56 +08:00

1.7 KiB
Raw Blame History

GET /api/v1/ad/reward-status — 今日看广告发奖进度

所属:Ad 组(前缀 /api/v1/ad | 鉴权:Bearer | ← 返回 API 索引

入参

无(用户由 token 确定)。

出参

响应 200:AdRewardStatusOut

字段 类型 说明
used_today int 今日已成功发奖次数
daily_limit int 每日发奖次数上限
remaining int 今日剩余可领次数
coin_per_ad int 看完一个激励视频发的金币
round_count int 本轮(3 次一组)已看次数,0..N-1。客户端可据「拿到 round_count==0 && cooldown_until!=null」判定刚刚看完一轮
cooldown_until datetime|null 本轮 10 分钟冷却结束时间(UTC ISO);null 表示不在冷却

说明

福利页「看视频赚金币」用:

  • 展示「今日还能看 N 次」「看一次得 M 金币」(remaining/coin_per_ad)
  • 任务行 CTA 4 态推导:adLoading → Loading;remaining==0 → Capped("明天再来");cooldown_until 在未来 → CoolingDown(显示 MM:SS 倒计时,不可点);否则 Normal("去赚取")
  • 弹窗 limit note:used_today >= daily_limit 显示「今日视频已到限额,明天再来」;round_count==0 && cooldown_until!=null 显示「本轮视频已看完,10分钟后再来」

冷却派生算法:取当日 status='granted' 记录里最近一个已完成轮(每 N=3 条算一轮)末尾那次的 created_at,加 10 分钟。若仍 > now → 返回;否则返回 null。冷却是 UX 约束,后端发奖(/api/v1/ad/pangle-callback)只看 daily_limit,冷却期间穿山甲回调照常发奖。

真正发奖走 ad-pangle-callback(穿山甲 S2S)。