feat(ad): expose reward result by session

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
no_gen_mu
2026-07-15 11:44:10 +08:00
parent 5c6840dd71
commit ff83f90007
4 changed files with 172 additions and 0 deletions
+19
View File
@@ -27,6 +27,7 @@ from app.repositories import ad_watch as crud_watch
from app.repositories import app_config
from app.repositories import signin as crud_signin
from app.schemas.ad import (
AdRewardResultOut,
AdRewardStatusOut,
EcpmReportIn,
EcpmReportOut,
@@ -242,6 +243,24 @@ def reward_status(user: CurrentUser, db: DbSession) -> AdRewardStatusOut:
)
@router.get(
"/reward-result/{ad_session_id}",
response_model=AdRewardResultOut,
summary="按广告会话查本次服务端权威发奖结果(弹窗展示实发金币用)",
)
def reward_result(ad_session_id: str, user: CurrentUser, db: DbSession) -> AdRewardResultOut:
"""激励视频关闭后,客户端按本次 `ad_session_id` 查服务端到底发了多少金币,弹窗只展示这个权威数字。
只读、只查本人本会话的 reward_video 记录:没有记录=pending(S2S 尚未到账,客户端继续有限重试,
别把"未到账"当 0);granted 返回真实 coin;capped/closed_early/ecpm_missing 返回终态(coin=0,
不伪装成 granted)。不返回 eCPM / 回调原文 / 他人信息。
"""
rec = crud_ad.find_reward_video_result(db, user.id, ad_session_id)
if rec is None:
return AdRewardResultOut(ad_session_id=ad_session_id, status="pending", coin=None)
return AdRewardResultOut(ad_session_id=ad_session_id, status=rec.status, coin=rec.coin)
@router.post(
"/watch-report",
response_model=WatchReportOut,