games-development-ai/contracts/db-schemas/V25.0.0__feed_rank_add_exposure_limit.sql
lili f85ae6c434 feat(feed): U5 限曝光降权 + 精选池导出
限曝光(boost 的反向运营操作):
- Flyway V25.0.0 加 game_feed_rank.exposure_limit DECIMAL(10,4) NOT NULL DEFAULT 0(additive,
  镜像 contracts/db-schemas);FeedRankDO 加 exposureLimit 字段。
- 排序口径升级为 sort_score = quality + boost - exposure_limit,统一收敛在 deriveSortScore()——
  setFeatured/setExposureLimit/发布基线重发布/算分回灌四写入点共用,保证 boost/exposure_limit 两个
  运营维度在任意写入路径都被保留(限曝光穿越 telemetry 算分回灌存活,已单测验证)。
- 两层效果:① 普通降权(0<x<9999)持久化进 sort_score 使游戏下沉(cursor 分页仍正确);
  ② 硬限曝光哨兵(>=9999)在 buildStream 出流处剔除(复用既有二次过滤续取机制,不动 status、可随时改回)。
- 新端点 POST /admin-api/feed/exposure-limit(复用 feed:featured:update 权限 + @ApiAccessLog UPDATE 审计),
  门禁=仅已发布且已有排序行(不新建孤儿降权行);错误码段 1-103-005-***。

导出:GET /admin-api/feed/featured/export-excel(feed:featured:export + EXPORT 审计)经 ExcelUtils
导出精选/限曝光排序覆盖层运营字段;空数据写表头。feed-server 加 starter-excel 依赖。

测试:FeedServiceImplTest 25→35(限曝光门禁/降权扣减/硬限曝光出流剔除/普通降权不剔/回灌保留限曝光/导出列表空与非空)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 11:06:35 -07:00

24 lines
2.5 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- =============================================================================
-- 契约 #2 DB 迁移 | 模块feed游戏流/精选/限曝光运营)| ownerU5R-ADMIN
-- 文件V25.0.0__feed_rank_add_exposure_limit.sqlFlyway只新增接 V22.0.0 之后;已合入禁止修改,回滚写补偿迁移 V25.0.1
-- 背书plan002 U5R-ADMIN admin 运营后端)限曝光特性——精选池(boost 加权)的反向运营手段(降权/限曝光)。
-- 内容game_feed_rank 加 exposure_limit —— 运营限曝光降权因子(精选 boost 的反向操作)。
-- 为何加列而非复用负 boost关键
-- 1) boost 语义=运营正向加权(精选/活动)sort_score=quality+boost若把降权塞进负 boost会与正向加权口径混淆、
-- 且算分回灌(QUALITY_REFRESH)重算 sort_score=quality+boost 时无法区分"降权意图"与"负向运营加权",语义污染不可逆;
-- 2) 独立列使降权显式、可审计;最终排序分口径升级为 sort_score = quality + boost - exposure_limit降权方向自洽
-- 3) 限曝光须穿越 telemetry 算分回灌存活——QUALITY_REFRESH 仅刷 quality_score 并据保留的 boost/exposure_limit 重算
-- sort_score同 boost 处理),故新列在算分回灌后仍生效(与 boost 同等"运营字段保留"地位)。
-- additive 非阻断exposure_limit DECIMAL(10,4) NOT NULL DEFAULT 0存量行=0 即无降权,零行为变更);
-- 存量 INSERT/SELECT 不含本列即得默认 0读写两侧零中断。
-- 取值口径exposure_limit >= 0
-- 0 = 无降权(默认,现行行为);
-- 0 < x = 降权 x 分sort_score 减 x游戏在流中相对下沉
-- >= 9999 = 硬限曝光(cap-hide)哨兵——buildStream 出流时直接剔除该游戏(不在流中露出),等价"运营软屏蔽"
-- (区别于 status=0 的下架/举报联动屏蔽:限曝光是运营节流,可随时改回,状态不变)。
-- 回滚additive → 真要 drop 写 V25.0.1 补偿迁移(不改本文件,遵 V4.0.0 头注铁律)。
-- 错误码段feed = 1-103-***-***(本迁移不引入新错误码)。
-- =============================================================================
ALTER TABLE `game_feed_rank`
ADD COLUMN `exposure_limit` DECIMAL(10,4) NOT NULL DEFAULT 0 COMMENT '运营限曝光降权因子(>=00无降权 / >0降权x分(sort_score-=x) / >=9999硬限曝光出流剔除哨兵最终 sort_score=quality+boost-exposure_limit' AFTER `boost`;