Files
cursor/plans/sdk_taskprogress_封装_5c8676e2.plan.md
ray zhou f71a5c59af ok
2026-05-29 11:21:40 +08:00

82 lines
3.9 KiB
Markdown
Raw 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.

---
name: SDK taskProgress 封装
overview: 将 slot_sdk或你们的 SDK 仓库)加入工作区后,可按现有 Wallet Client 模式直接实现 `player-task/task-progress` 的调用封装wallet 侧接口文档已就绪,可作为契约来源。
todos:
- id: add-sdk-workspace
content: 用户将 slot_sdk 加入 Cursor 工作区并告知仓库路径
status: completed
- id: explore-sdk-patterns
content: 阅读 SDK 现有 Wallet Client / HTTP 封装与错误处理约定
status: completed
- id: implement-client
content: 新增 taskProgress 方法、路径常量、请求/响应类型(对齐 player-task-progress-api.md
status: completed
- id: add-tests-or-example
content: 按 SDK 惯例补单测或调用示例(若项目有测试目录)
status: completed
isProject: false
---
# SDK 工作区加入后的直接开发方案
## 结论
**可以。** 当前工作区只有 [slot-wallet](file:///Users/ray/Documents/project/www/ray/slot-wallet),已具备接口契约文档 [doc/player-task-progress-api.md](doc/player-task-progress-api.md) 与实现对照(`PlayerTaskController``PlayerTaskQueryService` 等)。把 **SDK 仓库** 作为第二个根目录(或 monorepo 子目录)加入工作区后,我可以:
1. 阅读 SDK 里现有 Wallet/HTTP Client 的命名、基类、错误处理、DTO 约定;
2. 新增 `taskProgress`(或团队统一命名)方法、路径常量、请求/响应类型;
3. 若有单测/示例,补一条调用示例或 Feature 测试;
4. 保证字段 **snake_case** 与 HTTP JSON 一致,成功判定 `code === 0`
```mermaid
flowchart LR
subgraph workspace [Cursor Workspace]
Wallet[slot-wallet]
SDK[slot_sdk]
end
Doc[player-task-progress-api.md]
Wallet --> Doc
SDK -->|reads patterns| SDK
Doc -->|contract| SDK
SDK -->|POST player-task/task-progress| Wallet
```
## 你需要做的准备
| 项 | 说明 |
|----|------|
| 加入工作区 | Cursor**File → Add Folder to Workspace**,选中 SDK 仓库根目录 |
| 告知路径 | 例如 `company/ray/slots/slot_sdk`(与你们实际目录一致即可) |
| 语言确认 | 若是 PHP `slot_sdk`、Go、TS 等,我会跟现有 Client 语言一致,不另起一套风格 |
无需改 wallet 代码即可开始 SDK 开发wallet 接口已实现完毕。
## 我会按什么写(预期产出)
以 SDK 现有 Wallet Client 为模板(具体类名需打开 SDK 后确认),典型改动:
- **路径常量**`player-task/task-progress`
- **请求**`uid`, `currency`(可选统一附带 `trace_id` 若其他接口都有)
- **响应模型**`summary` + `bonus_tasks[]` + `deposit_tasks[]`,字段与 [doc/player-task-progress-api.md](doc/player-task-progress-api.md) §5 一致
- **错误**:复用 SDK 已有 `WalletApiError` / `code !== 0` 处理
## 跨仓库发布(团队规范)
按 [`.cursor/rules/slot-wallet-layers-and-delivery.mdc`](file:///Users/ray/Documents/project/www/ray/slot-wallet/.cursor/rules/slot-wallet-layers-and-delivery.mdc) §89
1. **先在 SDK 仓库** `commit``push`
2. 消费方(如 slot-wallet 若通过 composer 依赖 SDK`composer update` 并锁 `composer.lock`
当前 [composer.json](file:///Users/ray/Documents/project/www/ray/slot-wallet/composer.json) **尚未**声明 `slot_sdk` 依赖,说明 SDK 可能独立发布或由其他服务引用——这不影响我在 SDK 仓库内直接编码。
## 建议的确认项(加入工作区后第一条消息说明即可)
1. SDK 仓库在本机的**绝对路径**或文件夹名;
2. 方法命名偏好:`taskProgress` / `getPlayerTaskProgress` / 与现有 `wallet()` 等方法对齐;
3. 是否需要 **foundation 常量**(如 `source_type`)进 SDK还是仅透传 int。
## 不在本次默认范围
- 修改 wallet 服务端实现(已满足 PRD §26.1
- 自动 `composer update` 到其他服务(除非你明确要求并给出目标仓库)。