Add skill for gameplay entry type workflows

This commit is contained in:
2026-05-04 02:32:38 +08:00
parent 49aad7311c
commit 34aecdddf1
77 changed files with 5997 additions and 110 deletions

View File

@@ -0,0 +1,78 @@
# 个人任务与埋点系统技术方案
更新时间:`2026-05-03`
## 1. 目标
本轮新增一套可配置的个人任务系统,并补齐任务依赖的埋点统计能力。首个任务为“每日登录”,奖励 `10` 光点,入口放在“我的”页签;后台可修改任务配置。
## 2. 核心边界
- 埋点原始事实写入 `tracking_event`,这是实际存在的 SpacetimeDB 表。
- 聚合投影写入 `tracking_daily_stat`,这也是后端维护的真实表,不是 view。
- 任务配置写入 `profile_task_config`,默认配置包含 `daily_login`,后台修改后不得被默认初始化覆盖。
- 任务进度写入 `profile_task_progress`,用于任务中心快速读取状态。
- 领奖记录写入 `profile_task_reward_claim`,与钱包流水 `profile_wallet_ledger` 同事务写入。
- “星光”奖励复用现有“光点”钱包,不新增第二种货币。
## 3. 埋点分层
| 层级 | scope_kind | scope_id 口径 |
| --- | --- | --- |
| 整站 | `site` | 固定为 `site` 或站点分区 key |
| 作品 | `work` | 作品 profile_id / work_id |
| 模块 | `module` | 模块 key例如 `profile``puzzle` |
| 用户 | `user` | 用户 id |
每条埋点可同时记录 `user_id``owner_user_id``profile_id``module_key``metadata_json`。任务首版只依赖用户层 `daily_login`,表结构先保留四层统计能力。
## 4. 日期桶
任务统计使用北京时间自然日:`day_key = floor((occurred_at_micros + 8h) / 1d)`
这样存储仍是 UTC 时间戳,日切规则固定为业务口径,不依赖服务器本地时区。`tracking_event.occurred_at` 保存精确发生时间,`tracking_daily_stat.day_key` 只承担聚合桶职责。
## 5. 首版任务
| 字段 | 默认值 |
| --- | --- |
| task_id | `daily_login` |
| title | `每日登录` |
| event_key | `daily_login` |
| cycle | `daily` |
| threshold | `1` |
| reward_points | `10` |
| enabled | `true` |
用户打开任务中心时,后端会幂等记录当日 `daily_login` 埋点并刷新任务进度。用户点击领取时,后端校验当日进度、领奖记录和配置状态,然后同事务写入领奖记录与钱包流水。
后台任务配置页的 `Event Key` 使用可搜索下拉控件,选项来自前端后台的埋点定义注册表。当前注册表默认包含 `daily_login`,展示中文名称和备注;后续新增任务依赖的埋点时,应先补充注册表,再开放运营配置。
## 6. 接口
### 用户侧
- `GET /api/profile/tasks`:读取任务中心,同时记录当日登录埋点。
- `POST /api/profile/tasks/{task_id}/claim`:领取任务奖励。
### 后台侧
- `GET /admin/api/profile/tasks`:读取任务配置列表。
- `POST /admin/api/profile/tasks`:新增或更新任务配置。
- `POST /admin/api/profile/tasks/disable`:停用任务配置。
后台任务配置页进入时从 `profile_task_config` 对应的列表接口读取已有配置,点击列表项回填表单后仍通过同一个 upsert 接口修改原配置。最近一次保存结果可以保留为会话态提示,但不得作为任务配置列表的唯一来源。
## 7. 查询文档边界
- `docs/tracking/` 只存放具体埋点与埋点聚合查询,例如 `tracking_event``tracking_daily_stat` 的站点/作品/模块/用户查询。
- `docs/operations/` 存放运营核查查询,例如任务进度、领奖记录、钱包流水对账。
不要把任务进度、领奖记录或钱包对账查询塞进 `docs/tracking/`,它们不是埋点系统本身。
## 8. 验收
1. `profile_task_config` 默认存在 `daily_login`,后台可修改奖励、阈值、标题和启用状态。
2. “我的”页可以打开每日任务面板,登录后任务可领取 `10` 光点。
3. 重复打开任务中心不会重复增加领取资格,重复领奖不会重复发放。
4. 表目录、迁移白名单、Rust/TypeScript 契约和前端入口同步更新。