feat(guide-video): 支持领券和比价独立视频奖励配置 #196
Reference in New Issue
Block a user
Delete Branch "fix-guideVideoFix"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
🤖 review-pr 深审结论
🔴 必须改(迁移多-head,部署会炸) · 置信度 0.92
#96 的后端配套(同分支
fix-guideVideoFix)。功能实现扎实:per-scene 配置(_KEY_BY_SCENE)、admin 各端点加scene查询参数、按 scene 计次、发币金额在 start 锁进 play 行。pytest 6/6 通过、ruff 全过、与前端 #96 契约精确匹配。但有一个部署级阻断:
alembic/versions/guide_video_scene_unique.py—down_revision = ("d8dd2106e438", "risk_monitor_generic")。实跑alembic heads:origin/main本是单 head6d2309208549,合并本 PR 后变两个 head(6d2309208549+guide_video_scene_unique)→ 部署alembic upgrade head报 Multiple heads 失败。根因:迁移挂在已被6d2309208549吸收的旧修订上、没接当前 main head。修法:把down_revision收敛到6d2309208549(含它一起 merge,或直接挂其后),本地alembic upgrade head跑通再合。⚠️ 测试走create_all不走 alembic,6/6 绿灯掩盖了这个问题。app/repositories/guide_video.py—reward_coin默认120→100:对从未持久化过 reward_coin、一直吃默认值的既有 coupon 配置,会静默从 120 变 100;若刻意对齐产品新值则 OK。正面:与前端 #96 契约精确匹配(
scene查询参数 + 响应含scene+ 字段齐),二者须同发或后端先发;发币金额在start_play锁进 play 行、grant_play读play.coin——admin 中途改币不影响在飞的播放,是正确性改进;既有 coupon 配置零迁移保留(同 key),comparison 新起默认;迁移只改播放唯一索引、无需数据回填。建议:改
down_revision收敛到6d2309208549+ 本地alembic upgrade head验证;与 #96 一起上。🔒 只读深审 · worktree 旁路隔离 · 已核验零残留 · 实跑 alembic heads / pytest 6·6 / ruff
🤖 review-pr 深审结论
🟢 看着没问题(置信度 0.9)——多场景隔离设计正确、迁移安全、并发发币逻辑保持正确;实跑
pytest tests/test_guide_video.py6 项通过、alembic heads单一 head 可解析(链完整无孤儿、无分叉)。核心改动:新手引导视频奖励从单一 coupon 场景扩展为 coupon(领券)+ comparison(比价)两个独立场景——唯一索引
(user_id, seq)→(user_id, scene, seq)、配置 key 拆成coupon_guide_video/comparison_guide_video、计次/统计/发币按scene过滤。做得好的地方
grant_play金币来源由get_config(db)改读play.coin,一箭双雕:既修了多场景下会用默认(coupon)配置给 comparison 发错金额的隐患,又锁定了开播时承诺的金额(防播放期间运营改配置导致实发≠承诺)。scene列建表即有(默认 coupon),新唯一索引对存量数据等价旧索引、无冲突;drop 的旧索引uq_guide_video_play_user_seq在祖先链内必已存在;并有专门 commit 对齐 main 最新 head。Literal收窄 scene,API 层挡非法值;repository 层_config_key再兜底。建议(均 low,不阻塞合并)
app/models/guide_video.py:4顶部 docstring 仍写「每次固定 120 金币」,但_DEFAULTS已改 100,请同步文档。app/repositories/guide_video.py:192的_config_key(scene)裸调用返回值未用,下一行get_config内部已会校验,冗余可删。reward_coin默认 120 → 100 属语义变更(仅在 DB 无该 scene 配置行时生效),确认是否有意。🤖 review-pr 完整仓 worktree 深审(已合并最新 main)· 实跑 pytest + alembic heads