diff --git a/app/admin/repositories/coupon_data.py b/app/admin/repositories/coupon_data.py index 7fd104e..0450404 100644 --- a/app/admin/repositories/coupon_data.py +++ b/app/admin/repositories/coupon_data.py @@ -274,7 +274,11 @@ def coupon_user_records(db: Session, *, user_id: int, limit: int = 100) -> dict: total = db.execute( select(func.count()).select_from(CouponSession).where(CouponSession.user_id == user_id) ).scalar_one() - return {"items": [_session_to_row(r) for r in rows], "total": int(total)} + rev_map = crud_ecpm.revenue_yuan_by_trace(db, [r.trace_id for r in rows]) + return { + "items": [_session_to_row(r, ad_revenue_yuan=rev_map.get(r.trace_id, 0.0)) for r in rows], + "total": int(total), + } _SLOT_OK = ("success", "already_claimed") diff --git a/tests/test_board_ad_revenue.py b/tests/test_board_ad_revenue.py index 72d578c..6f54d86 100644 --- a/tests/test_board_ad_revenue.py +++ b/tests/test_board_ad_revenue.py @@ -6,7 +6,7 @@ from datetime import UTC, date, datetime from sqlalchemy import delete from app.admin.repositories import queries -from app.admin.repositories.coupon_data import coupon_data_report +from app.admin.repositories.coupon_data import coupon_data_report, coupon_user_records from app.db.session import SessionLocal from app.models.ad_ecpm import AdEcpmRecord from app.models.comparison import ComparisonRecord @@ -64,3 +64,24 @@ def test_comparison_list_includes_ad_revenue() -> None: db.execute(delete(ComparisonRecord).where(ComparisonRecord.trace_id == "rev-cmp-1")) db.commit() db.close() + + +def test_coupon_user_records_includes_ad_revenue() -> None: + """手机号抽屉的用户领券记录也带本次广告收益(400 分 → 0.004 元)。""" + db = SessionLocal() + try: + db.add(CouponSession( + trace_id="rev-drawer-1", device_id="d2", status="completed", app_env="prod", + user_id=987655, platforms=["meituan-waimai"], platform_success=["meituan-waimai"], + started_at=datetime(2020, 1, 2, tzinfo=UTC), started_date=date(2020, 1, 2), + )) + db.add(_ecpm("rev-drawer-1", "400", "drawer-sess-a", "coupon")) + db.commit() + res = coupon_user_records(db, user_id=987655) + row = next(r for r in res["items"] if r["trace_id"] == "rev-drawer-1") + assert row["ad_revenue_yuan"] == 0.004 + finally: + db.execute(delete(AdEcpmRecord).where(AdEcpmRecord.trace_id == "rev-drawer-1")) + db.execute(delete(CouponSession).where(CouponSession.trace_id == "rev-drawer-1")) + db.commit() + db.close()