Files
one-pipe-system/openspec/changes/update-series-grant-package-contract/design.md
luo dd6bceeeb7
Some checks failed
构建并部署前端到测试环境 / build-and-deploy (push) Has been cancelled
feat: 系统配置
2026-07-25 14:13:49 +08:00

1.9 KiB
Raw Blame History

Context

代理系列授权详情返回完整的 packages[],套餐列表接口返回可选套餐候选。前端创建授权时需要从候选套餐中选择初始套餐,详情和套餐管理页面则需要同时展示候选套餐信息与已授权状态。

Goals / Non-Goals

  • Goals:
    • package_id 为唯一键合并套餐候选和授权详情。
    • 在创建前校验初始套餐数量为 1100 且不重复。
    • 使用 remove=true 表达后续删除,保持接口响应结构不变。
  • Non-Goals:
    • 不修改后端接口路径或响应字段结构。
    • 不在前端复制后端的成本价、生效条件或套餐状态计算规则。
    • 不新增独立的套餐删除 API 调用。

Decisions

  • 套餐候选状态以 package_id 合并:详情返回的套餐标记为已授权,候选列表中不存在于详情的套餐标记为未授权。
  • 创建请求始终携带 packages,数量范围为 1100每个 package_id 只能出现一次。
  • 后续新增或调价沿用 PUT /api/admin/shop-series-grants/{id}/packages,删除项只提交 { package_id, remove: true }
  • 成功响应直接按后端返回的完整授权详情刷新页面,不根据请求内容自行拼装最终响应。

Risks / Trade-offs

  • 套餐候选接口分页或搜索结果可能不包含已授权套餐,合并时必须保留详情中的已授权项,避免误显示为未授权。
  • 用户一次选择超过 100 个套餐时前端应提前阻止提交,同时仍依赖后端校验作为最终约束。

Migration Plan

  1. 更新类型和 API 请求约束。
  2. 更新创建页、授权详情页和套餐列表页的候选合并及套餐操作逻辑。
  3. 使用接口响应重新加载授权详情,验证创建、调价、删除和空候选场景。

Open Questions

  • 套餐候选接口的分页大小是否允许一次返回全部候选;若不允许,页面需要继续使用远程搜索加载候选。