From 062f2b8b2ac6f71eba3aedc648d702bfe66eb351 Mon Sep 17 00:00:00 2001 From: guke Date: Fri, 7 Aug 2026 15:44:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(ad-feed):=20=E5=8F=91=E5=A5=96=E6=8A=8A?= =?UTF-8?q?=E6=9C=AC=E5=9C=BA=20trace=5Fid=20=E5=86=99=E5=85=A5=E9=87=91?= =?UTF-8?q?=E5=B8=81=E6=B5=81=E6=B0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- app/repositories/ad_feed_reward.py | 2 +- tests/test_welfare.py | 27 ++++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) 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"