d7c29c0883
- rewards: 激励视频实发改按 calculate_ad_reward_coin(eCPM, 当日第N次) 公式;AD_REWARD_COIN/MAX_AD_REWARD_COIN 降为历史兼容口径;新增 SIGNIN_BOOST_COIN=2000 - 签到膨胀: Day1-13 看完激励视频额外发固定金币、Day14 不允许 (signin.py / signin-boost) - ad_session_id 幂等: ad_ecpm/ad_reward/ad_feed_reward 记录加 ad_session_id 列 + 唯一索引(新迁移 coin_reward_phase2 / ad_feed_reward_session) - ad.py + schemas + repositories: ecpm-report / feed-reward / reward-status / test-grant 改造;config_schema 增 signin_boost_coin;admin stats overview 补充 - 同步 docs/api + docs/database + docs/integrations/pangle 及 tests(test_ad_reward / test_welfare) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: OuYingJun1024 <1034284404@qq.com> Reviewed-on: #28 Co-authored-by: ouzhou <ouzhou@wonderable.ai> Co-committed-by: ouzhou <ouzhou@wonderable.ai>
2.0 KiB
2.0 KiB
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 | 历史兼容字段;正式发放按 eCPM 动态计算,当前返回 0 |
round_count |
int | 本轮已看次数;当前 round_size=1,广告关闭后进入短冷却 |
cooldown_until |
datetime|null | 3 秒短冷却结束时间(UTC ISO);null 表示不在冷却 |
watched_seconds_today |
int | 今日已上报的激励视频观看秒数;当前仅兼容/排查用 |
watch_seconds_limit |
int | 每日观看总时长上限;当前默认 0 表示未启用时长闸 |
watch_seconds_remaining |
int | 今日剩余可观看秒数;watch_seconds_limit=0 时客户端不据此拦截 |
说明
福利页「看视频赚金币」用:
- 展示「今日还能看 N 次」(
remaining);单次金币正式按 eCPM 动态计算,不再用coin_per_ad预估 - 任务行 CTA 4 态推导:
adLoading→ Loading;remaining==0→ Capped("明天再来");cooldown_until在未来 → CoolingDown(显示 MM:SS 倒计时,不可点);否则 Normal("去赚取") - 弹窗 limit note:
used_today >= daily_limit显示「今日视频已到限额,明天再来」;cooldown_until!=null显示「广告冷却中,3秒后再来」
冷却派生算法:取当日 status='granted' 记录里最近一个已完成轮(当前每 N=1 条算一轮)末尾那次的 created_at,加 3 秒。若仍 > now → 返回;否则返回 null。冷却是 UX 约束,后端发奖(/api/v1/ad/pangle-callback)只看 daily_limit,冷却期间穿山甲回调照常发奖。
真正发奖走 ad-pangle-callback(穿山甲 S2S)。