84 lines
2.8 KiB
Markdown
84 lines
2.8 KiB
Markdown
# 展示基线方案(Display Seed Baseline)
|
||
|
||
## 背景
|
||
|
||
worksheet 的 `likes`(收藏)和 `downloads`(下载)初始值为 0,对用户缺乏吸引力。
|
||
之前的做法是直接修改数据库真实字段,导致无法区分哪些是运营配置的底数、哪些是真实用户行为。
|
||
|
||
## 方案概述
|
||
|
||
**数据层拆开:真实 + 展示基线。**
|
||
|
||
| 字段 | 含义 | 谁在写 | 初始值 |
|
||
|------|------|--------|--------|
|
||
| `likes` | 真实用户收藏累加 | 云函数 `worksheetsStatsUpdate` / `userFavorites` 的 `inc(1)` | 0 |
|
||
| `downloads` | 真实用户下载累加 | 云函数 `worksheetsStatsUpdate` / `userDownloadLogs` 的 `inc(1)` | 0 |
|
||
| `likes_seed` | 运营配置的收藏基线 | worksheetSync 页面一键同步 | 0 |
|
||
| `downloads_seed` | 运营配置的下载基线 | worksheetSync 页面一键同步 | 0 |
|
||
|
||
**展示值** = `likes + likes_seed`(或 `downloads + downloads_seed`)
|
||
|
||
**运营看板** 只看 `likes` / `downloads`(真实值),不受 seed 污染。
|
||
|
||
## 涉及改动
|
||
|
||
### 1. 数据库 `worksheets` 集合
|
||
|
||
每条 worksheet 新增两个字段:
|
||
|
||
```json
|
||
{
|
||
"likes_seed": 20,
|
||
"downloads_seed": 15
|
||
}
|
||
```
|
||
|
||
### 2. Seed 数据来源
|
||
|
||
文件路径:`miniprogram/supportPages/worksheetSync/mockLikes.ts`
|
||
|
||
导出 `MOCK_SEED_COUNTS`,以 worksheet id 为 key,值为 `{ downloads, likes }`。
|
||
|
||
### 3. worksheetSync 管理页
|
||
|
||
新增「同步 Seed 数据」按钮,点击后:
|
||
|
||
1. 读取 `MOCK_SEED_COUNTS`
|
||
2. 构建 patches:`[{ id, likes_seed, downloads_seed }, ...]`
|
||
3. 调用 `worksheetsBatchPatch` 批量写入
|
||
|
||
### 4. 云函数改动
|
||
|
||
所有对外返回 `likes` / `downloads` 的云函数,在返回前合并 seed 值:
|
||
|
||
```js
|
||
item.likes = (item.likes || 0) + (item.likes_seed || 0);
|
||
item.downloads = (item.downloads || 0) + (item.downloads_seed || 0);
|
||
```
|
||
|
||
涉及的云函数:
|
||
|
||
| 云函数 | 改动点 |
|
||
|--------|--------|
|
||
| `worksheetsQuery` | 返回数据前合并 seed |
|
||
| `ageRecommendedQuery` | 合并 seed 后再排序和取 Top N |
|
||
| `homeAutoRefresh` | 改为全量查询 + 合并 seed + 内存排序 |
|
||
| `pageContentBuild` | `toDisplayItem` 中合并 seed |
|
||
|
||
### 5. 不需要改动的部分
|
||
|
||
| 模块 | 原因 |
|
||
|------|------|
|
||
| `worksheetsStatsUpdate` | 只 `inc(1)` 真实字段,不涉及 seed |
|
||
| `userDownloadLogs` | 只 `inc(1)` downloads,不涉及 seed |
|
||
| `userFavorites` | 只 `inc(1)` likes,不涉及 seed |
|
||
| `worksheetsPublish` | 发布时设置真实初始值,不涉及 seed |
|
||
| 用户端收藏/下载交互 | 保持现有行为不变 |
|
||
|
||
## 优势
|
||
|
||
1. **真实数据干净**:`likes` / `downloads` 永远只反映真实用户行为
|
||
2. **全站一致**:所有出口在云端统一计算展示值,端上无需额外逻辑
|
||
3. **调整无需发版**:修改 seed 后通过管理页一键同步,不用重新构建小程序
|
||
4. **运营可判断**:直接查 DB 的 `likes` / `downloads` 字段即为真实数据
|