fix(admin-coupon-data): fill ad_revenue_yuan in user-records drawer too

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
guke
2026-07-10 14:37:18 +08:00
parent e9c0a80d44
commit 4680277c2a
2 changed files with 27 additions and 2 deletions
+5 -1
View File
@@ -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")
+22 -1
View File
@@ -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()