diff --git a/app/repositories/ad_feed_reward.py b/app/repositories/ad_feed_reward.py index a90c0c7..1649b89 100644 --- a/app/repositories/ad_feed_reward.py +++ b/app/repositories/ad_feed_reward.py @@ -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, diff --git a/tests/test_welfare.py b/tests/test_welfare.py index 72b0ff0..a7d6abe 100644 --- a/tests/test_welfare.py +++ b/tests/test_welfare.py @@ -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"