Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+173
View File
@@ -0,0 +1,173 @@
# 91迭代配置改动点
适用分支:`feat/91-iteration`
本文只记录环境配置、后台业务配置和上线数据处理。账号、密钥及各环境真实配置值不得写入本文。
## 一、App运行配置
文件:`config/app.json`
新增根节点:
```json
{
"shortRecommend": {
"enabled": true,
"requestTimeoutMs": 3000,
"maxBatches": 5,
"scanMultiplier": 5,
"keyTTLHours": 72
},
"laoSiJiAiMate": {
"appId": "<按环境填写>",
"apiKey": "<按环境填写,不得写入Git或文档>",
"apiUrl": "<按环境填写>"
}
}
```
字段说明:
| 字段 | 默认值/要求 | 说明 |
|---|---|---|
| `shortRecommend.enabled` | 未配置默认 `true` | 是否使用全局短视频环形队列 |
| `requestTimeoutMs` | 默认 `3000`,范围 `10010000` | App读取推荐队列超时 |
| `maxBatches` | 默认 `5`,范围 `120` | 过滤失效视频时最多补取批次 |
| `scanMultiplier` | 默认 `5`,范围 `120` | 单批候选扫描倍数 |
| `keyTTLHours` | 默认 `72`,有效范围 `24720` | 推荐队列、偏移等Redis键TTL |
| `laoSiJiAiMate.*` | 三项必须完整 | AI女友V2第三方配置,仅App使用 |
`base.totalWatch` 不再作为免费观看次数来源,请从 app 配置移除。非VIP免费观看总次数改为通过后端系统配置 `sys_conf``gpCode=common`)中的 `totalWatchCount` 控制。
## 二、SKD运行配置
文件:`config/skd.json`
新增根节点:
```json
{
"shortRecommend": {
"enabled": true,
"cron": "CRON_TZ=Asia/Shanghai 0 5/10 * * * ?",
"keyTTLHours": 72,
"maxInitializationWrites": 50000
}
}
```
字段说明:
| 字段 | 默认值/要求 | 说明 |
|---|---|---|
| `enabled` | 未配置默认 `true` | 是否注册推荐队列任务并在启动时补建 |
| `cron` | 每10分钟健康检查 | 当天队列健康时不会重复生成 |
| `keyTTLHours` | 默认 `72` | 必须与App保持一致 |
| `maxInitializationWrites` | 生产未配置默认 `50000`;非生产默认 `0` | 首次推荐分初始化写入保护;显式 `0` 表示关闭限制 |
正式发布前必须统计未初始化短视频数。若超过保护阈值,任务会在任何批量写入前终止;应选择提前初始化、提高阈值或经确认后显式关闭限制。
## 三、Web运行配置
`config/web.json` 没有新增字段。Web需要发布代码以提供管理后台配置接口,但不需要新增运行配置。
## 四、后台和数据库业务配置
这些数据不会随Jenkins代码发布从测试库迁移到生产库,各环境需要单独配置。
### 4.1 亚模块配置(`module_conf`
新增字段:
- `onlineAt``offlineAt`
- `excludeLatest`
- `excludeRecommend`
- `searchOnlyWhenInactive`
- `haiJiaoStyle.sortRules[].refreshMode`
- `haiJiaoStyle.sortRules[].randomCandidateN`
历史热门排序 `val=2` 未配置刷新字段时,会兼容为 `RANDOM_TOP_N`、候选数 `30`,不依赖可编辑标题。
### 4.2 付费引导(`payment_guide`
按环境配置场景、用户分层、样式、文案、套餐、跳转、启用状态和有效期。
场景新增 `DISCOUNT_COUNTDOWN`;该场景只配置卡片内容,固定2小时倒计时由前端在每次App冷启动时本地重新创建,后端不使用 `durationSeconds` 计算倒计时。
新增 `HOME_NEW_USER_FREE_TRIAL`,用于“首页新用户免费 X 次试看”,X 读取 `totalWatchCount`;旧 `HOME_NEW_USER` 保留兼容代码但不再向 App/Web 返回。`HOME_NEW_USER_FREE_TRIAL``HOME_OLD_USER` 共用系统配置 `paymentGuideHomeEnabled` 作为首页场景总开关。
`VIP_CONTENT_UPDATE.videoLimit` 未配置或为 `0` 时默认返回4条,最大20条。
曝光记录集合 `payment_guide_impression` 由程序自动写入,不需初始化。
### 4.3 评论区Banner`scene_banner`
场景固定为 `COMMENT_TOP`,配置图片/GIF、内外链、排序、启用状态和上下架时间。
没有默认Banner,测试环境数据不会自动进入生产。
### 4.4 VIP卡片A/B`vip_card_experiment`
按环境使用真实套餐ID配置:
- A/B流量比例
- 套餐列表与默认套餐
- `skinKey`
- `productBadges`
- `uiConfig.backgroundImage`
- `uiConfig.badgeStyles`
- 实验结束时间
默认没有启用实验;未发布实验时会员套餐接口保持原有返回。统计事件集合由程序自动写入。
### 4.5 系统配置(`sys_conf`
- 新增 `freeTrialBadgeEnabled=true`:服务启动时自动补充,上线前确认最终开关值。
- 新增 `totalWatchCount`(int):非VIP用户单日免费观看上限,可编辑/可查看,默认值 `3`
- 示例:把 `totalWatchCount` 设置为 `3`,则 `totalWatchCount` 返回 `3`
- 新增 `paymentGuideHomeEnabled=true`(bool):首页付费引导共用开关,同时控制 `HOME_NEW_USER_FREE_TRIAL``HOME_OLD_USER`,可在 Web 系统通用配置中查看和编辑。
- 复用 `aiGirlFriend=true`AI女友V2启用条件之一。
## 五、历史数据处理
`media` 新增 `latestPublishedAt`,历史数据必须回填,否则动漫/漫画最新排序会受缺失值影响:
```javascript
db.media.updateMany(
{
status: 1,
isDelete: false,
latestPublishedAt: { $exists: false }
},
[
{
$set: {
latestPublishedAt: {
$ifNull: [
"$contentUpdateTime",
{
$ifNull: [
"$updateTime",
"$createdAt"
]
}
]
}
}
}
]
)
```
执行前后应分别统计缺失数量并抽样核对排序结果。该脚本需单独执行,代码发布不会自动回填。
## 六、基础设施与发布范围
- 不新增Kafka Topic、MQ、Redis实例、端口或操作系统crontab。
- 继续使用现有MongoDB和Redis。
- App/H5接口发布 `BUILD_ITEM=app`
- 管理后台接口发布 `BUILD_ITEM=web`
- 推荐队列生成任务发布 `BUILD_ITEM=skd`
- 服务启动会自动创建新增集合和索引,需确认MongoDB账号具有建索引权限。
- Redis推荐队列、版本、用户偏移及红点缓存均由程序自动创建,无需手工初始化。
## 七、不属于本分支的配置
- 测试环境手工调整的 `imv2.baseUrl``imv2.dynamicConfigDomain``imv2.socketUrl` 是环境修复,不是 `feat/91-iteration` 新增配置。
- H.265相关配置属于其他开发分支,不计入本迭代配置改动。