52 lines
1.7 KiB
Markdown
52 lines
1.7 KiB
Markdown
# catArr 服务器云函数设计
|
||
|
||
## 目标
|
||
|
||
在服务器端新增独立的 `catArr` 数据链路,用于保存玩家已经拥有的猫咪 ID。第一期仅实现登录初始化、读取和手动保存,不实现抽取逻辑。
|
||
|
||
## 数据约定
|
||
|
||
- `catArr` 保存为非负整数数组。
|
||
- 新用户的默认值为 `[1, 2, 3]`。
|
||
- 老用户没有 `catArr` 字段时,读取接口返回 `[1, 2, 3]`。
|
||
- 保存猫咪时不允许重复添加同一个 ID。
|
||
- `users` 和 `usersAd` 两个用户集合使用相同行为。
|
||
|
||
## 云函数改动
|
||
|
||
### login
|
||
|
||
在新用户写入数据库时增加:
|
||
|
||
```ts
|
||
catArr: user?.catArr || [1, 2, 3]
|
||
```
|
||
|
||
老用户登录时不覆盖已有的 `catArr`。
|
||
|
||
### setCatArr
|
||
|
||
新增独立的 `setCatArr.ts` 和 `setCatArr.yaml`,接口结构与 `setHeadArr` 保持一致:
|
||
|
||
- 根据 `gameName` 选择 `users` 或 `usersAd`。
|
||
- 根据 `uid` 查询用户。
|
||
- 按现有方式校验 token。
|
||
- `action: "read"` 返回 `{ catArr }`。
|
||
- `action: "save"` 将 `ctx.body.catNum` 转换为数字,仅接受非负整数,校验后去重追加并写回数据库。
|
||
- 不支持的 action 返回错误。
|
||
|
||
## 兼容与错误处理
|
||
|
||
- 用户不存在时返回明确错误,不访问空的用户数据。
|
||
- `catNum` 不是非负整数时拒绝保存。
|
||
- 重复保存已有猫咪 ID 时返回“已保存猫咪”,不重复写数据库。
|
||
- 老用户首次保存时,以 `[1, 2, 3]` 为基础追加,避免丢失默认猫咪。
|
||
|
||
## 验证
|
||
|
||
- 静态检查 `login` 的新用户数据包含默认 `catArr`。
|
||
- 验证读取缺少字段的老用户时返回 `[1, 2, 3]`。
|
||
- 验证保存新猫咪 ID 会追加并持久化。
|
||
- 验证重复 ID 和无效 ID 不会写入。
|
||
- 验证 `users` 与 `usersAd` 的集合路由不变。
|