ur98 issues
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
# 01 — 换货分配记录与归属校正发布基础
|
||||
|
||||
**What to build:** 使系统能够安全发布换货归属继承所需的 `exchange` 资产分配记录能力:每次完成换货可按换货单号追踪新资产、原所有者、目标所有者和操作人,并能阻止同一换货单为同一新资产重复留痕。发布前同时核查现存钱包租户标签、资源标签租户字段及分配记录结构中无法自动校正的异常数据;不回填历史已完成换货。
|
||||
|
||||
**Blocked by:** None — can start immediately.
|
||||
|
||||
**Status:** ready-for-agent
|
||||
|
||||
**架构通道:** Infrastructure。
|
||||
|
||||
**完整业务边界:** 收口 `exchange` 分配类型、必要的持久化约束或索引、迁移验证、异常数据核查和发布/回滚说明,使后续换货完成用例可在事务内可靠写入分配记录。
|
||||
|
||||
**明确不迁移:** 不迁移换货状态机、客户绑定、钱包或套餐资料迁移、现有换货接口、资产详情换货链查询,也不自动改写历史已完成换货归属。
|
||||
|
||||
- [ ] `exchange` 分配类型及必要的数据库约束、索引可独立向上迁移、验证和向下回滚,常量与注释遵循项目中文规范。
|
||||
- [ ] 按换货单号和新资产可追踪分配记录,且同一换货单不会为同一新资产生成重复记录。
|
||||
- [ ] 发布前完成对新资产现存钱包租户标签、资源标签租户字段和分配记录结构的核查,列出无法自动校正的异常数据,但不自动回填历史换货。
|
||||
- [ ] 架构约束:本票仅提供持久化与发布基础,不强行建立聚合根,不承载换货完成状态机或资料迁移业务规则。
|
||||
@@ -0,0 +1,20 @@
|
||||
# 02 — 以归属继承原子完成换货
|
||||
|
||||
**What to build:** 运营人员可用平台库存或同店铺新资产完成物流或直接换货;系统在一次原子操作中让新资产继承旧资产店铺及直接派生的多租户字段,保留旧资产归属历史,记录可追溯的换货分配和审计事实。其他店铺资产被统一拒绝;重复或并发完成不会重复迁移资料、写分配记录或产生资金副作用。
|
||||
|
||||
**Blocked by:** 01 — 换货分配记录与归属校正发布基础。
|
||||
|
||||
**Status:** ready-for-agent
|
||||
|
||||
**架构通道:** 复杂写(`Handler → Application UseCase → Exchange Domain → Repository/Infrastructure`)。
|
||||
|
||||
**完整业务边界:** 收口物流确认完成及直接换货即时完成:锁定换货单与新旧资产,校验类型、状态、归属、占用和客户绑定,同步新资产归属与派生租户字段,写换货分配记录,迁移客户绑定,按 `migrate_data` 迁移既有资料,推进新旧资产和换货单状态,并在同一事务写入关键 Audit Event。
|
||||
|
||||
**明确不迁移:** 不迁移创建、发货、取消等未触碰换货规则,不迁移资产详情前代/后代 Query,不回填历史换货归属,不重构非本完整用例涉及的资产、钱包、套餐模块。
|
||||
|
||||
- [ ] 新资产为平台库存或已属旧资产店铺时可换入;属于其他店铺时返回统一 403 且不泄露店铺信息、无任何副作用;旧资产 `shop_id` 保持不变。
|
||||
- [ ] 无论 `migrate_data` 为 true 或 false,新资产的归属状态、`shop_id` 和所有直接派生租户字段均与旧资产当前归属一致;旧资产目标归属为空时,新资产保持平台库存语义。
|
||||
- [ ] 客户绑定始终在完成时迁移;仅在 `migrate_data=true` 时迁移钱包余额、套餐使用、累计数据和普通业务标签,目标数据冲突沿用既有安全校验而不覆盖。
|
||||
- [ ] 使用锁内最新状态校验和状态条件更新保证幂等:重复或并发完成仅执行一次归属同步、客户迁移、资料迁移、分配记录和审计副作用,其余请求返回已完成的幂等成功结果。
|
||||
- [ ] 在各关键步骤注入失败时,资产、绑定、钱包、套餐、标签、分配记录、换货状态和 Audit Event 全部回滚;卡与设备、物流与直接换货、两种 `migrate_data` 分支均有事务集成测试。
|
||||
- [ ] 架构约束:归属、状态、迁移和并发不变量完整收口在 Exchange Domain;Application 只编排事务与端口,旧 Service 至多作为转发门面,不保留第二套完成逻辑。
|
||||
@@ -0,0 +1,20 @@
|
||||
# 03 — 换货继承归属接口投影与展示契约
|
||||
|
||||
**What to build:** 前端通过既有创建、发货、列表和详情接口即可稳定获得旧资产当前归属及新资产将继承的店铺信息:响应统一提供 `inherited_shop_id` 与 `inherited_shop_name`,平台库存用明确的平台语义表示。完成接口成功后,前端重新读取详情即可取得最终继承结果;不提供目标店铺选择或单独归属接口。
|
||||
|
||||
**Blocked by:** 02 — 以归属继承原子完成换货。
|
||||
|
||||
**Status:** ready-for-agent
|
||||
|
||||
**架构通道:** 主通道为 Query(`Handler → Query → GORM/DTO`);辅助为 Application 已确定结果的只读输出投影。
|
||||
|
||||
**完整业务边界:** 收口 `ExchangeOrderResponse` 在创建、发货、列表和详情的继承归属字段及一致语义,包含列表批量加载、读取权限、分页、DTO 投影、OpenAPI 契约和接口级联调验证。
|
||||
|
||||
**明确不迁移:** 不开发前端页面,不提供目标店铺选择控件,不修改换货写侧状态机,不迁移资产详情前代/后代链路,也不迁移其他旧读取接口。
|
||||
|
||||
- [ ] 创建、发货、列表和详情响应均返回语义一致的 `inherited_shop_id` 与 `inherited_shop_name`;平台库存目标返回空店铺 ID 和明确平台文案。
|
||||
- [ ] 请求中没有目标店铺字段或独立归属接口;前端可据此展示旧资产当前店铺及“换货完成后将归属”的只读提示。
|
||||
- [ ] 列表查询负责权限、分页、批量加载与 DTO 投影,店铺名称不产生 N+1;Query 不写状态,写接口只投影 Application 已确定的业务结果。
|
||||
- [ ] HTTP 集成测试同时断言响应体和数据库状态,覆盖平台库存、同店铺、其他店铺拒绝及完成后刷新详情。
|
||||
- [ ] OpenAPI 明确字段和展示语义、完成成功后刷新详情、重复提交与失败时保留表单的接口交互约定。
|
||||
- [ ] 架构约束:读取不经过聚合根、不使用读取快照作写侧判断;只迁移本票涉及的换货响应投影。
|
||||
@@ -0,0 +1,19 @@
|
||||
# 04 — 换货继承接口联调验收与发布闭环
|
||||
|
||||
**What to build:** 交付可发布的换货归属继承接口契约:维护窗口内 API、Worker 和前端同步切换,前端按接口完成创建、发货、完成与详情刷新交互的人工验收;OpenAPI、UR#98 中文总结、README 索引及回滚说明完整可用。本票只交付接口联调与验收清单,不开发前端页面。
|
||||
|
||||
**Blocked by:** 02 — 以归属继承原子完成换货;03 — 换货继承归属接口投影与展示契约。
|
||||
|
||||
**Status:** ready-for-agent
|
||||
|
||||
**架构通道:** Infrastructure;辅助验证复杂写与 Query 契约。
|
||||
|
||||
**完整业务边界:** 收口 API 文档生成、中文功能总结、README 索引、维护窗口切换、异常数据核查引用、回滚方案和前端人工验收,使归属继承可独立联调、验证和发布。
|
||||
|
||||
**明确不迁移:** 不回填历史已完成换货;不实现 UR#45 的资产快照规则或 UR#86 的前代/后代投影;不进行前端页面开发或其他模块发布改造。
|
||||
|
||||
- [ ] 人工验收覆盖创建、发货、完成、详情的加载中、失败、重复提交和成功刷新,并验证“换货完成后将归属”只读提示。
|
||||
- [ ] 其他店铺资产被拒绝时,前端只展示统一错误并保留表单,不展示或推断其他店铺详情。
|
||||
- [ ] OpenAPI、UR#98 中文总结和 README 索引已更新,文档说明字段语义、异常闭环、维护窗口同步切换、回滚边界和历史数据不回填策略。
|
||||
- [ ] 发布前复核 01 产生的异常数据清单;API、Worker 与前端在同一维护窗口切换,回滚不改写历史已完成换货。
|
||||
- [ ] 架构约束:本票只收口发布、文档和验收,不新增聚合根、不改变已确定的复杂写与 Query 边界。
|
||||
Reference in New Issue
Block a user