Files
junhong_cmp_fiber/openspec/changes/archive/2026-09-07-add-asset-package-hierarchy/proposal.md

33 lines
2.6 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.
## Scope
- 迭代编号:`AUG26-013`
- 需求依据:`docs/product/2026-08-迭代-PRD-讨论稿.md` 的 AUG26-013、§2.14`111.md` 仅用于原始追溯。
- 开工检查提出的整组分页与筛选、不可展示父项失败处理、空生效时间排序方案已确认,纳入本 Change。
## Why
资产套餐历史平铺展示,无法识别主套餐与其加油包的真实关联。
## What Changes
- 在后台资产详情和 H5 套餐历史按既有 `master_usage_id` 投影主套餐—加油包层级,返回 `children``expand_by_default`,保留失效、过期、用尽及退款历史关系。
- **BREAKING**:分页单位由单条使用记录改为顶层关系组或物理缺失主项的异常独立项;`total` 改为筛选后的顶层项数量。子项不独立计数、不跨页;保留两端既有分页参数、页大小限制及响应壳字段名。
- **BREAKING**:现有状态/套餐类型条件在同一条记录上联合匹配,组内任一记录命中即选择整组,返回可见范围内完整父子,不再逐条筛掉关联项。后台仍不新增套餐类型筛选。
- **BREAKING**:历史响应从平铺项改为层级项,普通主项显式返回 `master_usage_id=null`;后台与 H5 消费者需同步适配,不保留并行平铺接口。
- 主记录物理缺失时返回既定异常独立项;父记录存在但因资产、世代或软删除范围不可展示时,整个查询返回统一读取错误,不越界补显、不静默丢项、不伪报物理缺失。
- 顶层按创建时间倒序、ID 倒序;子项按有生效时间的非待生效项、无生效时间的非待生效项、待生效项分桶排序,各桶同时间按使用记录 ID 正序。
- 后台继续读取当前解析资产的全部世代H5 继续限定资产当前世代;保留既有资产授权入口、字段可见性、商品查询失败处理和软删除商品类型筛选口径。
## Capabilities
### New Capabilities
- 无。
### Modified Capabilities
- `package-lifecycle`: 套餐历史层级、整组分页与筛选、排序、关系异常和读取兼容契约。
## Impact
- 影响 `GET /api/admin/assets/{identifier}/packages``GET /api/c/v1/asset/package-history` 的读取投影、历史专用 DTO、路由说明与 OpenAPI以及后台和 H5 消费者。
- 两端共享同一只读关系投影,批量读取使用记录与商品;不逐主套餐查询子项。当前套餐及套餐修改接口的响应不随公共 DTO 被动变化。
- 不新增写接口、关联表、Schema 迁移或外部依赖;不修改套餐状态、金额、生命周期及未触碰的权限体系。不将存量企业授权风险作为本期顺带修复。