docs: update creator recovery plan and verification evidence
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
362
docs/test-matrix.md
Normal file
362
docs/test-matrix.md
Normal file
@@ -0,0 +1,362 @@
|
||||
# 全项目页面逐按钮测试矩阵(落盘存档)
|
||||
|
||||
更新日期:2026-02-07(Asia/Shanghai)
|
||||
|
||||
## 1) 测试范围
|
||||
|
||||
- Portal:`frontend/portal/src/router/index.js` 所有业务路由(含登录、主页、频道、内容详情、用户中心、创作者中心、结算支付)。
|
||||
- Superadmin:`frontend/superadmin/src/router/index.js` 所有 superadmin 路由 + uikit/pages/landing 路由。
|
||||
- 粒度:页面级 + 按钮/链接级(可见可交互控件采样执行)。
|
||||
- 数据前置:已执行补齐后的 seed(见 `backend/app/commands/seed/seed.go`)。
|
||||
|
||||
## 2) 测试环境
|
||||
|
||||
- Backend API: `http://127.0.0.1:18080`(healthz=204)
|
||||
- Superadmin: `http://127.0.0.1:5173`
|
||||
- Portal: `http://127.0.0.1:5174`
|
||||
- 租户代码:`meipai_990`
|
||||
- Portal登录:手机号 `13800138000` + OTP `1234`
|
||||
- Superadmin登录:`superadmin / superadmin123`
|
||||
|
||||
## 3) Portal 页面矩阵(按页面)
|
||||
|
||||
> 说明:`ok=false` 表示页面可打开但检测到错误关键词(如 404/not found 等),通常来自页面内某些资源/API,不一定是整页不可用。
|
||||
|
||||
| Route | 结果 | 代表按钮(采样) | 备注 |
|
||||
|---|---|---|---|
|
||||
| `/t/meipai_990` | ⚠️ 部分异常 | 退出登录 / 推荐 / 最新 / 热门 / 全部 / 京剧... | 存在 `/v1/t/:tenantCode/tenants` 404 |
|
||||
| `/t/meipai_990/channel` | ⚠️ 部分异常 | 退出登录 / 私信 / 主页 / 关于 / 最新 / 最热 | 同上,频道页伴随 tenants 404 |
|
||||
| `/t/meipai_990/contents/1` | ✅ | 发布评论 / 回复 / 关注 / 私信 | 详情页主流程可用 |
|
||||
| `/t/meipai_990/explore` | ⚠️ 部分异常 | 分类过滤按钮组、免费/付费 | 存在 tenants 404 |
|
||||
| `/t/meipai_990/topics` | ✅ | 导航/跳转链接可用 | 页面可达 |
|
||||
| `/t/meipai_990/creator/apply` | ✅ | 立即申请入驻 | 可提交入口存在 |
|
||||
| `/t/meipai_990/creator/contents/new` | ✅ | 存草稿 / 发布 / 免费/付费/会员专享 | 创作发布页可达 |
|
||||
| `/t/meipai_990/me` | ✅ | 退出登录 / 清空历史 | 个人中心可达 |
|
||||
| `/t/meipai_990/me/orders` | ✅ | 全部订单/待支付/已完成/退款售后/去支付/取消订单 | 订单列表动作可见 |
|
||||
| `/t/meipai_990/me/orders/1` | ✅ | 复制 / 联系商家 | 详情页可达 |
|
||||
| `/t/meipai_990/me/wallet` | ✅ | 立即充值 | 钱包页可达 |
|
||||
| `/t/meipai_990/me/coupons` | ✅ | 未使用/已使用/已过期 | 状态切换可见 |
|
||||
| `/t/meipai_990/me/library` | ✅ | 立即阅读 | 已购库可达 |
|
||||
| `/t/meipai_990/me/favorites` | ✅ | 批量管理 / 取消收藏 | 收藏页可达 |
|
||||
| `/t/meipai_990/me/likes` | ✅ | 取消点赞 | 点赞页可达 |
|
||||
| `/t/meipai_990/me/notifications` | ✅ | 全部/系统/订单/审核/互动/全部已读 | 通知中心可达 |
|
||||
| `/t/meipai_990/me/profile` | ✅ | 保存修改 | 资料页可达 |
|
||||
| `/t/meipai_990/me/security` | ✅ | 更换 / 去认证 | 安全页可达 |
|
||||
| `/t/meipai_990/checkout?contentId=1` | ✅ | 提交订单 / 取消 | 下单页可达 |
|
||||
| `/t/meipai_990/payment/1` | ✅ | 确认余额支付 | 支付页可达 |
|
||||
|
||||
### Portal 关键异常
|
||||
|
||||
1. `GET /v1/t/meipai_990/tenants?limit=5` 返回 404(页面顶部若依赖该接口,会触发异常标记)。
|
||||
2. 多条 `/v1/storage/https://images.unsplash.com/...` 返回 404(种子中外链被当作 storage path 访问,导致图片资源请求失败)。
|
||||
|
||||
## 4) Superadmin 页面矩阵(按页面)
|
||||
|
||||
| Route | 结果 | 按钮数量(采样统计) | 代表按钮(采样) |
|
||||
|---|---|---:|---|
|
||||
| `/super/` | ✅ | 6 | Aura/Lara/Nora/Static/Overlay/Logout |
|
||||
| `/super/superadmin/tenants` | ✅ | 20 | 健康概览/创建租户/查询/重置/展开 |
|
||||
| `/super/superadmin/health` | ✅ | 10 | 刷新/查询/重置/展开 |
|
||||
| `/super/superadmin/users` | ✅ | 34 | 查询/重置/展开/分页 |
|
||||
| `/super/superadmin/users/1` | ✅ | 44 | 资料/角色/状态/拥有租户/加入租户 |
|
||||
| `/super/superadmin/orders` | ✅ | 41 | 查询/重置/退款/标记问题/完成对账 |
|
||||
| `/super/superadmin/orders/1` | ✅ | 9 | 取消标记/撤销对账/退款 |
|
||||
| `/super/superadmin/contents` | ✅ | 36 | 内容列表/评论治理/举报治理/批量通过/批量驳回 |
|
||||
| `/super/superadmin/creators` | ✅ | 45 | 创作者列表/申请审核/成员审核/结算账户 |
|
||||
| `/super/superadmin/coupons` | ✅ | 34 | 券模板/发放记录/异常核查/新建优惠券 |
|
||||
| `/super/superadmin/finance` | ✅ | 31 | 提现审核/钱包流水/异常排查/刷新 |
|
||||
| `/super/superadmin/reports` | ✅ | 23 | 导出CSV/查询/重置 |
|
||||
| `/super/superadmin/assets` | ✅ | 11 | 查询/重置/展开 |
|
||||
| `/super/superadmin/notifications` | ✅ | 23 | 通知列表/模板管理/群发通知 |
|
||||
| `/super/superadmin/audit-logs` | ✅ | 11 | 查询/重置/展开 |
|
||||
| `/super/superadmin/system-configs` | ✅ | 13 | 新建配置/查询/重置/编辑 |
|
||||
| `/super/pages/empty` | ✅ | 6 | 基础布局按钮 |
|
||||
| `/super/pages/crud` | ✅ | 12 | New/Delete/Export/分页 |
|
||||
| `/super/documentation` | ✅ | 6 | 基础布局按钮 |
|
||||
| `/super/landing` | ✅ | 4 | Register/Get Started |
|
||||
| `/super/uikit/button` | ✅ | 66 | Submit/Disabled/Link/Primary... |
|
||||
| `/super/uikit/formlayout` | ✅ | 7 | Submit |
|
||||
| `/super/uikit/input` | ✅ | 11 | Option1/2/3/Search |
|
||||
| `/super/uikit/table` | ✅ | 15 | Clear/分页 |
|
||||
| `/super/uikit/list` | ✅ | 12 | Buy Now |
|
||||
| `/super/uikit/tree` | ✅ | 6 | 基础布局按钮 |
|
||||
| `/super/uikit/panel` | ✅ | 16 | Save/Header tabs |
|
||||
| `/super/uikit/overlay` | ✅ | 11 | Show/Save/Confirm/Delete |
|
||||
| `/super/uikit/media` | ✅ | 6 | 基础布局按钮 |
|
||||
| `/super/uikit/message` | ✅ | 10 | Success/Info/Warn/Error |
|
||||
| `/super/uikit/file` | ✅ | 11 | Choose/Upload/Cancel |
|
||||
| `/super/uikit/menu` | ✅ | 13 | Header I/II/III |
|
||||
| `/super/uikit/charts` | ✅ | 6 | 基础布局按钮 |
|
||||
| `/super/uikit/misc` | ✅ | 8 | Emails/Messages |
|
||||
| `/super/uikit/timeline` | ✅ | 10 | Read more |
|
||||
|
||||
## 5) 失败/阻塞项复现
|
||||
|
||||
### F1(高)Portal tenants 接口 404
|
||||
- 现象:首页/频道/探索页出现 `ok=false`,并在后端日志出现 404。
|
||||
- 复现:登录 Portal 后访问 `/t/meipai_990` 或 `/t/meipai_990/channel`。
|
||||
- 后端日志:`GET /v1/t/meipai_990/tenants?limit=5` -> 404。
|
||||
- 影响:门户首页顶部/频道信息可能缺失或报错。
|
||||
- 建议优先级:**P1**(核心入口页异常)。
|
||||
|
||||
### F2(中)Portal 外链图片走 storage 路由导致 404
|
||||
- 现象:大量 `/v1/storage/https://images.unsplash.com/...` 404。
|
||||
- 复现:访问首页/列表相关页面即可触发。
|
||||
- 根因倾向:内容封面 URL 为外链,但前端拼接了 storage 下载前缀。
|
||||
- 影响:缩略图/封面显示失败,体验受损。
|
||||
- 建议优先级:**P2**。
|
||||
|
||||
## 6) 覆盖统计
|
||||
|
||||
- Portal 路由覆盖:20/20(按执行清单)
|
||||
- Superadmin 路由覆盖:35/35(按执行清单)
|
||||
- 可见按钮/操作覆盖:
|
||||
- Portal:每页采样记录按钮,均有可见交互控件(详情见上表)
|
||||
- Superadmin:每页记录按钮数量与代表动作(详见上表)
|
||||
|
||||
## 7) 结论
|
||||
|
||||
- **总体:可用,但存在两类明显缺陷(F1/F2)**。
|
||||
- Superadmin 页面可达与按钮可见性整体正常。
|
||||
- Portal 核心流程(登录、订单、钱包、个人中心、支付页)可访问;但租户信息接口与外链图片路径处理需要修复。
|
||||
|
||||
---
|
||||
|
||||
## 附:证据来源
|
||||
|
||||
- 浏览器自动化:Playwright MCP(页面快照 + 按钮/链接枚举 + 路由巡检)
|
||||
- 后端证据:`pty_0e911c68` 运行日志中的 404 记录
|
||||
- 环境会话:
|
||||
- backend: `pty_0e911c68`
|
||||
- superadmin: `pty_28cea2be`
|
||||
- portal: `pty_1773d898`
|
||||
|
||||
## 8) 闭环测试执行上下文(Action -> API -> DB)
|
||||
|
||||
- 执行时间:2026-02-07 11:56 ~ 12:00(Asia/Shanghai)
|
||||
- 数据前置:`cd backend && env GOCACHE=$PWD/.gocache GOTMPDIR=$PWD/.gotmp go run . seed`
|
||||
- 本轮租户:`meipai_157`(`tenant_id=1`)
|
||||
- 账号:
|
||||
- Portal:`13800138000 + 1234`
|
||||
- Superadmin:`superadmin / superadmin123`
|
||||
- 验证方式:
|
||||
- 通过 API 触发页面等效动作(UI-equivalent)
|
||||
- 每个场景记录前置状态/动作/后置状态/SQL证据
|
||||
|
||||
### 8.1 全局前后快照
|
||||
|
||||
| 指标 | 前置 | 后置 | Delta |
|
||||
|---|---:|---:|---:|
|
||||
| `user_content_actions` | 2 | 3 | +1 |
|
||||
| `comments` | 1 | 2 | +1 |
|
||||
| `orders` | 12 | 14 | +2 |
|
||||
| `order_items` | 3 | 4 | +1 |
|
||||
| `content_access` | 3 | 3 | +0 |
|
||||
| 买家余额(分) | 5000 | 104010 | +99010 |
|
||||
| 买家未读通知(tenant=1) | 8 | 0 | -8 |
|
||||
|
||||
## 9) 闭环场景结果表
|
||||
|
||||
### 9.1 Portal 闭环场景
|
||||
|
||||
| 场景 | 前置状态 | 动作(UI 等效 API) | 后置状态(DB/API 证据) | 结果 |
|
||||
|---|---|---|---|---|
|
||||
| 点赞内容 | `content_id=1` 已有 like 记录 1 条 | `POST /v1/t/meipai_157/contents/1/like` | HTTP 200;like 记录 1 -> 1(幂等) | ✅ Pass |
|
||||
| 收藏内容 | `content_id=2` favorite 记录 0 条 | `POST /v1/t/meipai_157/contents/2/favorite` | HTTP 200;favorite 记录 0 -> 1 | ✅ Pass |
|
||||
| 评论内容 | `content_id=3` 评论数 0 | `POST /v1/t/meipai_157/contents/3/comments`(`闭环评论 cc25fadc2c`) | HTTP 200;评论数 0 -> 1;新评论 `id=2` | ✅ Pass |
|
||||
| 下单+支付+发放访问权限 | `content_id=4` | `POST /orders` -> `order_id=13`;`POST /orders/13/pay` | 订单状态=paid、order_item=1;**content_access(order_id=13)=0**,总量无增量 | ❌ Fail |
|
||||
| 充值码兑换 | `RC_ACTIVE_1000` 为 active | `POST /me/wallet/recharge`(code=RC_ACTIVE_1000) | HTTP 200;code: active->redeemed;余额 +100000 分;`redeemed_order_id=14`;**order(14) status=created** | ❌ Fail |
|
||||
| 全部通知已读 | 未读 8 | `POST /me/notifications/read-all` | HTTP 200;未读 8 -> 0 | ✅ Pass |
|
||||
|
||||
### 9.2 Superadmin 闭环场景
|
||||
|
||||
| 场景 | 前置状态 | 动作 | 后置状态(DB/API 证据) | 结果 |
|
||||
|---|---|---|---|---|
|
||||
| 系统配置 create/update | 无 `qa_closure_84f9cb6e` | `POST /super/v1/system-configs` -> `PATCH /super/v1/system-configs/3` | 配置值更新为 `{"value":"v2","source":"qa-update"}`;description=`qa closure updated`;审计日志 2 条(create+update) | ✅ Pass |
|
||||
| 通知模板 create/update | 无 `qa_template_f342df9a` | `POST /super/v1/notifications/templates` -> `PATCH /super/v1/notifications/templates/5` | 标题更新为 `QA Template Title Updated`;`is_active=false`;审计日志 1 条 | ✅ Pass |
|
||||
| 群发通知下游落库 | 目标用户未读=0 | `POST /super/v1/notifications/broadcast`(tenant=1) | API 返回 200,但通知表无新增(title 查询=0);补测显式 user_ids 仍无落库 | ⚠️ Blocked |
|
||||
|
||||
## 10) 失败/阻塞场景复现与证据
|
||||
|
||||
### F3(高)支付成功但未发放内容访问权限
|
||||
- 复现:
|
||||
1. `POST /v1/t/meipai_157/orders`(`content_id=4`)
|
||||
2. `POST /v1/t/meipai_157/orders/13/pay`(`method=balance`)
|
||||
- 实际:
|
||||
- `orders.id=13 status=paid`
|
||||
- `order_items(order_id=13)=1`
|
||||
- `content_access(order_id=13)=0`
|
||||
- 证据 SQL(节选):
|
||||
- `SELECT id,status,order_id FROM content_access WHERE user_id=2 AND content_id=4;` -> `id=3,status=expired,order_id=9`
|
||||
- `SELECT id,status,amount_paid FROM orders WHERE id=13;` -> `13,paid,990`
|
||||
- 影响:用户完成支付后可能无权访问已购内容。
|
||||
- 优先级:**P1**。
|
||||
|
||||
### F4(严重)充值码兑换后订单状态未结算为 paid
|
||||
- 复现:
|
||||
1. `POST /v1/t/meipai_157/me/wallet/recharge`(`code=RC_ACTIVE_1000`)
|
||||
- 实际:
|
||||
- 接口 200,返回 `order_id=14`
|
||||
- 充值码状态 active->redeemed,`redeemed_order_id=14`
|
||||
- 用户余额 +100000 分(到账)
|
||||
- 但 `orders.id=14 status=created`(应为 paid)
|
||||
- 证据 SQL(节选):
|
||||
- `SELECT code,status,redeemed_order_id,amount FROM recharge_codes WHERE code='RC_ACTIVE_1000';` -> `redeemed,14,100000`
|
||||
- `SELECT id,status,type,amount_paid FROM orders WHERE id=14;` -> `14,created,recharge,100000`
|
||||
- 影响:资金到账与订单状态不一致,影响对账/风控/财务准确性。
|
||||
- 优先级:**P0**。
|
||||
|
||||
### B1(阻塞)超管群发通知闭环无法在当前环境确认
|
||||
- 复现:
|
||||
1. `POST /super/v1/notifications/broadcast`(tenant=1)返回 200
|
||||
2. 查询 `notifications` 未见新记录
|
||||
- 说明:`services/notification.go` 默认走异步任务队列(`job.Add`);仅 `JOB_INLINE=1` 才同步落库。当前环境未启动消费方,导致“动作成功但下游证据缺失”。
|
||||
- 处理建议:
|
||||
- 启用 worker,或
|
||||
- 在闭环环境设置 `JOB_INLINE=1` 再复测。
|
||||
- 状态:**Blocked(非功能结论,环境前置不足)**。
|
||||
|
||||
### F1(高)Portal tenants 接口 404(回归确认)
|
||||
- 请求:`GET /v1/t/meipai_157/tenants?limit=5`
|
||||
- 结果:HTTP **404**
|
||||
- 影响:门户首页/频道页租户信息区块异常。
|
||||
- 优先级:**P1**。
|
||||
|
||||
### F2(中)外链图片被当作 storage 路径(回归确认)
|
||||
- 请求:`GET /v1/storage/https://images.unsplash.com/photo-1514306191717-452ec28c7f31`
|
||||
- 结果:HTTP **404**
|
||||
- 影响:封面图/缩略图加载失败。
|
||||
- 优先级:**P2**。
|
||||
|
||||
## 11) 优先级缺陷清单(P0/P1/P2)
|
||||
|
||||
### P0
|
||||
1. **充值码兑换订单状态不一致**:余额到账 + code 已 redeem,但 recharge 订单仍为 `created`(F4)。
|
||||
|
||||
### P1
|
||||
1. **支付后未发放访问权限**:订单 paid 但未新增 active content_access(F3)。
|
||||
2. **Portal tenants 接口 404**:核心入口页租户数据缺失(F1)。
|
||||
|
||||
### P2
|
||||
1. **外链图片走 storage 前缀导致 404**(F2)。
|
||||
|
||||
### Blocked(需环境补齐后再定级)
|
||||
1. **超管群发通知下游落库验证**:当前队列消费未启用(B1)。
|
||||
|
||||
## 12) 最终闭环覆盖总结
|
||||
|
||||
- 闭环场景总数:9
|
||||
- ✅ 通过:6
|
||||
- ❌ 失败:2
|
||||
- ⚠️ 阻塞:1
|
||||
|
||||
- Fully Closed:
|
||||
- Portal:点赞、收藏、评论、通知全部已读
|
||||
- Superadmin:系统配置 create/update、通知模板 create/update
|
||||
|
||||
- Partially Closed / Failed:
|
||||
- Portal:下单支付后访问权限发放(失败)
|
||||
- Portal:充值兑换状态一致性(失败)
|
||||
|
||||
- Blocked:
|
||||
- Superadmin:群发通知下游落库验证(需 worker/JOB_INLINE 前置)
|
||||
|
||||
## 13) 2026-02-07 回归复测(修复后)
|
||||
|
||||
- 执行时间:2026-02-07 12:57 ~ 13:07(Asia/Shanghai)
|
||||
- 后端:`go run . serve`(`http://127.0.0.1:18080`)
|
||||
- 复测前置:`cd backend && env GOCACHE=$PWD/.gocache GOTMPDIR=$PWD/.gotmp go run . seed`
|
||||
- 本轮租户:`meipai_569`(`tenant_id=1`)
|
||||
- Portal 登录:`POST /v1/auth/otp` + `POST /v1/auth/login`(`13800138000` / OTP `1234`)
|
||||
|
||||
### 13.1 关键接口复测结果(Action -> API -> DB)
|
||||
|
||||
| 场景 | 动作 | 结果 | 证据 |
|
||||
|---|---|---|---|
|
||||
| 支付后 content_access 恢复 active | `POST /v1/t/meipai_569/orders`(`content_id=4`)-> `order_id=13`;`POST /v1/t/meipai_569/orders/13/pay` | ✅ 订单支付成功,已有 `expired` 访问记录被恢复为 `active` 并绑定新订单 | `orders.id=13 status=paid`; `order_items(order_id=13)=1`; `content_access(user_id=2,content_id=4)` 从 `status=expired,order_id=9` 变为 `status=active,order_id=13` |
|
||||
| 充值兑换订单状态一致性 | `POST /v1/t/meipai_569/me/wallet/recharge`(`code=RC_ACTIVE_1000`)-> `order_id=14` | ✅ 兑换后订单状态为 `paid`,与余额到账一致 | `recharge_codes.code='RC_ACTIVE_1000' status=redeemed, redeemed_order_id=14`; `orders.id=14 status=paid,type=recharge`; `users.id=2 balance=104010` |
|
||||
| Portal tenants 列表接口 | `GET /v1/t/meipai_569/tenants?limit=5`(带/不带 token) | ✅ 返回 200,不再 404 | 响应体包含分页与 tenant 项:`{"page":1,"total":1,"items":[...]}` |
|
||||
| 外链图片 URL | `GET /v1/t/meipai_569/contents?page=1&limit=3` | ✅ `cover` 返回外链绝对 URL,不再拼接 `/v1/storage/https://...` | 响应中 `cover` 字段为 `https://images.unsplash.com/...`;`media_assets.object_key` 为 `http(s)` 外链时直出 |
|
||||
|
||||
### 13.2 新发现(回归期间)
|
||||
|
||||
- `Creator` 路由缺失(与本轮四项缺陷不同):
|
||||
- 复测请求:`GET /v1/t/meipai_569/creator/orders` 返回 404。
|
||||
- 服务启动日志中无任何 `/v1/t/:tenantCode/creator/...` 路由注册项。
|
||||
- 代码现状:`backend/app/http/v1/creator.go` 只有一个方法 `GrantCoupon`,但其注释块包含大量不匹配该方法签名的 `@Router` 声明,导致路由生成器未产出 creator 路由。
|
||||
- 影响:Portal 创作者中心依赖的 `/creator/*` API 存在不可用风险(需单独修复)。
|
||||
|
||||
### 13.3 构建/测试验证
|
||||
|
||||
- `cd backend && env GOCACHE=$PWD/.gocache GOTMPDIR=$PWD/.gotmp go test ./...`
|
||||
- 结果:✅ 全量通过。
|
||||
|
||||
### 13.4 状态更新(P0/P1/P2)
|
||||
|
||||
- P0 充值兑换状态不一致(F4):✅ **已修复并复测通过**
|
||||
- P1 支付后未发放访问权限(F3):✅ **已修复并复测通过**
|
||||
- P1 Portal tenants 接口 404(F1):✅ **已修复并复测通过**
|
||||
- P2 外链图片拼接 storage 前缀(F2):✅ **已修复并复测通过**
|
||||
- Blocked(群发通知异步落库):⚠️ 仍依赖 worker/JOB_INLINE 环境前置
|
||||
|
||||
## 14) 2026-02-07 Creator 路由恢复验证(回归补录)
|
||||
|
||||
- 执行时间:2026-02-07 19:28 ~ 19:31(Asia/Shanghai)
|
||||
- 后端:`go run . serve`(`http://127.0.0.1:18080`)
|
||||
- 路由生成:`cd backend && atomctl gen route`
|
||||
- 全量回归:`cd backend && env GOCACHE=$PWD/.gocache GOTMPDIR=$PWD/.gotmp go test ./...`(✅ pass)
|
||||
|
||||
### 14.1 前端 Creator API -> 后端 Controller/Service 映射
|
||||
|
||||
| 前端函数(`frontend/portal/src/api/creator.js`) | 后端路由 | Controller 方法 | Service 方法 |
|
||||
|---|---|---|---|
|
||||
| `apply` | `POST /v1/t/:tenantCode/creator/apply` | `Creator.Apply` | `services.Creator.Apply` |
|
||||
| `getDashboard` | `GET /v1/t/:tenantCode/creator/dashboard` | `Creator.Dashboard` | `services.Creator.Dashboard` |
|
||||
| `listContents` | `GET /v1/t/:tenantCode/creator/contents` | `Creator.ListContents` | `services.Creator.ListContents` |
|
||||
| `getContent` | `GET /v1/t/:tenantCode/creator/contents/:id<int>` | `Creator.GetContent` | `services.Creator.GetContent` |
|
||||
| `createContent` | `POST /v1/t/:tenantCode/creator/contents` | `Creator.CreateContent` | `services.Creator.CreateContent` |
|
||||
| `updateContent` | `PUT /v1/t/:tenantCode/creator/contents/:id<int>` | `Creator.UpdateContent` | `services.Creator.UpdateContent` |
|
||||
| `deleteContent` | `DELETE /v1/t/:tenantCode/creator/contents/:id<int>` | `Creator.DeleteContent` | `services.Creator.DeleteContent` |
|
||||
| `listOrders` | `GET /v1/t/:tenantCode/creator/orders` | `Creator.ListOrders` | `services.Creator.ListOrders` |
|
||||
| `refundOrder` | `POST /v1/t/:tenantCode/creator/orders/:id<int>/refund` | `Creator.RefundOrder` | `services.Creator.ProcessRefund` |
|
||||
| `getSettings` | `GET /v1/t/:tenantCode/creator/settings` | `Creator.GetSettings` | `services.Creator.GetSettings` |
|
||||
| `updateSettings` | `PUT /v1/t/:tenantCode/creator/settings` | `Creator.UpdateSettings` | `services.Creator.UpdateSettings` |
|
||||
| `listPayoutAccounts` | `GET /v1/t/:tenantCode/creator/payout-accounts` | `Creator.ListPayoutAccounts` | `services.Creator.ListPayoutAccounts` |
|
||||
| `addPayoutAccount` | `POST /v1/t/:tenantCode/creator/payout-accounts` | `Creator.AddPayoutAccount` | `services.Creator.AddPayoutAccount` |
|
||||
| `removePayoutAccount` | `DELETE /v1/t/:tenantCode/creator/payout-accounts?id=:id` | `Creator.RemovePayoutAccount` | `services.Creator.RemovePayoutAccount` |
|
||||
| `withdraw` | `POST /v1/t/:tenantCode/creator/withdraw` | `Creator.Withdraw` | `services.Creator.Withdraw` |
|
||||
| `listMembers` | `GET /v1/t/:tenantCode/creator/members` | `Creator.ListMembers` | `services.Tenant.ListMembers` |
|
||||
| `removeMember` | `DELETE /v1/t/:tenantCode/creator/members/:id<int>` | `Creator.RemoveMember` | `services.Tenant.RemoveMember` |
|
||||
| `listMemberInvites` | `GET /v1/t/:tenantCode/creator/members/invites` | `Creator.ListMemberInvites` | `services.Tenant.ListInvites` |
|
||||
| `createMemberInvite` | `POST /v1/t/:tenantCode/creator/members/invite` | `Creator.CreateMemberInvite` | `services.Tenant.CreateInvite` |
|
||||
| `disableMemberInvite` | `DELETE /v1/t/:tenantCode/creator/members/invites/:id<int>` | `Creator.DisableMemberInvite` | `services.Tenant.DisableInvite` |
|
||||
| `listMemberJoinRequests` | `GET /v1/t/:tenantCode/creator/members/join-requests` | `Creator.ListMemberJoinRequests` | `services.Tenant.ListJoinRequests` |
|
||||
| `reviewMemberJoinRequest` | `POST /v1/t/:tenantCode/creator/members/:id<int>/review` | `Creator.ReviewMemberJoinRequest` | `services.Tenant.ReviewJoin` |
|
||||
| `listCoupons` | `GET /v1/t/:tenantCode/creator/coupons` | `Creator.ListCoupons` | `services.Coupon.List` |
|
||||
| `getCoupon` | `GET /v1/t/:tenantCode/creator/coupons/:id<int>` | `Creator.GetCoupon` | `services.Coupon.Get` |
|
||||
| `createCoupon` | `POST /v1/t/:tenantCode/creator/coupons` | `Creator.CreateCoupon` | `services.Coupon.Create` |
|
||||
| `updateCoupon` | `PUT /v1/t/:tenantCode/creator/coupons/:id<int>` | `Creator.UpdateCoupon` | `services.Coupon.Update` |
|
||||
| `grantCoupon` | `POST /v1/t/:tenantCode/creator/coupons/:id<int>/grant` | `Creator.GrantCoupon` | `services.Coupon.Grant` |
|
||||
| (Portal 报表页预留) | `GET /v1/t/:tenantCode/creator/reports/overview` | `Creator.ReportOverview` | `services.Creator.ReportOverview` |
|
||||
| (Portal 报表页预留) | `POST /v1/t/:tenantCode/creator/reports/export` | `Creator.ExportReport` | `services.Creator.ExportReport` |
|
||||
|
||||
### 14.2 路由恢复证据
|
||||
|
||||
- `atomctl gen route` 输出包含 Creator 路由发现日志(`Found route ... /v1/t/:tenantCode/creator/...`)。
|
||||
- `backend/app/http/v1/routes.gen.go` 已出现 29 条 creator 路由注册项(`/v1/t/:tenantCode/creator/*`)。
|
||||
- 服务启动日志显示 Creator 路由已注册(`Registering route: ... /v1/t/:tenantCode/creator/...`)。
|
||||
|
||||
### 14.3 冒烟结果(至少 /creator/orders 非 404)
|
||||
|
||||
| 请求 | 鉴权 | 结果 | 说明 |
|
||||
|---|---|---|---|
|
||||
| `GET /v1/t/meipai_569/creator/orders` | 无 token | `401` | 命中路由,返回缺失 token(非 404) |
|
||||
| `GET /v1/t/meipai_569/creator/orders` | 买家 token(13800138000) | `403` | 命中路由,权限校验 `非创作者`(非 404) |
|
||||
| `GET /v1/t/meipai_569/creator/orders` | 创作者 token(13800000001) | `200` | 返回订单列表 JSON |
|
||||
| `GET /v1/t/meipai_569/creator/contents` | 创作者 token | `200` | 返回分页结构(`page/limit/total/items`) |
|
||||
| `GET /v1/t/meipai_569/creator/settings` | 创作者 token | `200` | 返回频道设置对象 |
|
||||
|
||||
### 14.4 剩余风险
|
||||
|
||||
1. 本轮为 Creator 路由恢复回归,重点覆盖“路由可达 + 鉴权行为 + 关键读接口”。
|
||||
2. 写接口(如内容编辑、成员审核、优惠券发放、提现)尚未逐一做 Action->DB 闭环,建议在下一轮专项回归补齐。
|
||||
Reference in New Issue
Block a user