feat(ad-feed): 发奖把本场 trace_id 写入金币流水

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
guke
2026-08-07 15:44:28 +08:00
parent daa8c89dc6
commit 062f2b8b2a
2 changed files with 27 additions and 2 deletions
+1 -1
View File
@@ -219,7 +219,7 @@ def grant_feed_reward(
crud_wallet.grant_coins(
db, user_id, coin,
biz_type=reward_biz, ref_id=client_event_id,
remark=reward_remark,
remark=reward_remark, trace_id=trace_id,
)
rec = AdFeedRewardRecord(
client_event_id=client_event_id,
+26 -1
View File
@@ -6,7 +6,7 @@ from __future__ import annotations
import json
from sqlalchemy import text
from sqlalchemy import select, text
from app.core.config import settings
from app.core.rewards import (
@@ -20,6 +20,8 @@ from app.core.rewards import (
from app.db.session import SessionLocal
from app.integrations import pangle
from app.models.ad_feed_reward import AdFeedRewardRecord
from app.models.wallet import CoinTransaction
from app.repositories import ad_feed_reward as crud_feed
from app.repositories import wallet as crud_wallet
from app.repositories.user import get_user_by_phone
@@ -461,3 +463,26 @@ def test_backfill_coin_trace_id_from_ad_record(client) -> None:
assert c2.trace_id == "trace-CPN"
assert c3.trace_id is None # 无关类型不动
assert c4.trace_id is None # 广告行 trace_id 为空 → EXISTS 守护跳过、保持 NULL
def test_grant_feed_reward_sets_coin_trace_id(client) -> None:
"""grant_feed_reward(comparison) 把 trace_id 透传给 grant_coins,coin_transaction 带上本场 trace_id。"""
phone = "13800002003"
_login(client, phone)
with SessionLocal() as db:
user = get_user_by_phone(db, phone)
assert user is not None
rec = crud_feed.grant_feed_reward(
db, user.id,
client_event_id="evt-fr-1", ecpm="1000", duration_seconds=10,
feed_scene="comparison", trace_id="trace-FR", display_coin=5,
)
assert rec.status == "granted", rec.status
txn = db.execute(
select(CoinTransaction).where(
CoinTransaction.user_id == user.id,
CoinTransaction.ref_id == "evt-fr-1",
)
).scalar_one()
assert txn.biz_type == "feed_ad_reward_comparison"
assert txn.trace_id == "trace-FR"