Skip to content

fix(框架): 修复树CRUD一致性并扩展维度候选目录 - #370

Open
zhou-hao wants to merge 16 commits into
5.0.xfrom
codex/dynamic-asset-dimensions
Open

zhou-hao wants to merge 16 commits into
5.0.xfrom
codex/dynamic-asset-dimensions

Conversation

@zhou-hao

@zhou-hao zhou-hao commented Oct 10, 2026 •

Copy link
Copy Markdown
Member

树节点移动、部分更新和级联删除需要同时维护持久树结构、事务与正式实体事件。本 PR 修复通用树 CRUD 的一致性问题,补充维度候选目录查询和树删除准备扩展点;框架保持公共能力,不依赖动态维度或应用实现模块。

  • Save 按完整树关系保存:已有节点 parentId=null 表示移根,维护未提交后代的 path/level;遗漏 children 不删除后代。公开 PATCH /资源 保持批量 Save/upsert,普通业务列 null 沿用 ORM 写入规则。
  • 通用根标记 null、空字符串、-1 均检查 parentId;实体自身 ID 为 -1 且有合法父级时仍是普通节点。同步 save(E)、save(Collection) 统一委托既有 save(List),三个入口采用同一树准备和事务/事件链。
  • 响应式 updateById 保持部分更新与纯 UPDATE:null 保留持久值,目标零修改时停止 children;已有节点经过完整 Modify before/after,新 child 经过 Save。公开 PUT /资源/{id} 保持该入口。同步 updateById 直接仓储 UPDATE,缺失目标返回零,已有目标通过正式 Modify 校验;同步树结构变化通过完整 Save 提交。
  • 树删除先完成 prepareTreeDelete,再读取当前 seeds/path 与最终子树,按叶先顺序分批删除;路径、正式事件和各批 SQL 共用树操作事务。普通条件 DSL 的领域事务由实际业务 Service 开启。
  • DimensionUserEntity 保留原成员 ID 生成规则,动态维度类型不改变旧成员身份。

集中验证:framework 17 套 / 124 个定向测试,123 通过、1 个既有跳过(EntityEventListenerTest.testInsertError)、0 failure/error。真实 JDBC/R2DBC H2、HTTP 接口和正式实体事件覆盖移根、部分更新、分组隔离、后代维护、删除准备、多批、取消及事务回滚。新增 TreeRootMarkerRegressionTest 7 个与 SyncTreeEntryPointContractTest 8 个用例全部通过,覆盖根标记和 ID 反例、三个同步 Save 入口、缺失目标纯 UPDATE,以及正式 Modify 拒绝后调用方先前写入和整树快照回滚。

消费者使用已验证的新 CRUD 制品重新运行 components TagControllerTest 18 个用例及 auth 三 JVM 长场景 1 个用例,全部通过。后者使用真实 PostgreSQL/Redis、生产初始化、登录/签名 JWT、HTTP 绑定、资源 SQL/动作和持续 SSE,覆盖业务停机/重启、树移动、成员撤权/新增及类型禁用;认证和资源节点不加载业务种子或应用实现类。4 个新子进程全部退出、2 个测试容器全部移除。合计本次新运行 19 套 / 143 个用例,142 通过、1 个既有跳过;这是分层定向范围,不是全框架测试或 143 个端到端场景。

独立 JaCoCo 使用新 exec、append=false、唯一 session,没有累加历史数据:

类 行覆盖率 分支覆盖率
TreeSortServiceHelper 98.37% 90.58%
ReactiveTreeSortEntityService 96.69% 93.33%
TreeSortEntityService 95.65% 92.86%

整个 CRUD 模块在上述 17 套定向测试中的行/分支覆盖率为 37.29%/29.10%,不代表全模块覆盖结论。执行选择、契约及迁移说明已同步 CONTRIBUTING.md。消费者实际使用的 hsweb-commons-crud:5.0.2-SNAPSHOT SHA256 为 562d31389a0235a209552989775b5f97ab6f193910eb157ea9c3feb6a9feaa20,179 个 class 与本次测试编译集一致。

远端验证:HEAD 3bf1a764f66fd0b417345d0784f6d845ebde22d8 的 Pull Request test 5.0.x / build(JDK17) 和 CLA 均通过。

兼容边界:旧 save(Publisher) / save(E) 覆写中的更新校验需迁移到正式 Modify/Save/Create 事件,不承诺透明调用旧 Save 覆写。同步部分 UPDATE 不扩展为结构修图入口;不自动修复历史持久数据。通用 -1 根支持不扩大 DynamicDimension/CommonTag 的领域父级规则。按用户决定不新增通用锁,普通树并发新增/删除仍有子树快照之外的新 child 风险。消费者本地使用 2.12.0-SNAPSHOT;该验证不替代 components/auth 当前 2.20 base 的合并验证。框架快照发布仍由维护者处理。

@zhou-hao zhou-hao changed the title fix(框架): 完善树事务与维度目录扩展 fix(框架): 修复树CRUD一致性与维度成员身份 Oct 11, 2026
@zhou-hao zhou-hao changed the title fix(框架): 修复树CRUD一致性与维度成员身份 fix(框架): 修复树CRUD一致性并扩展维度候选目录 Oct 12, 2026
同步 Save 重载复用现有树准备;updateById 保持纯 UPDATE 和正式 Modify 事件。补齐根标记、保存入口、缺失目标与原事务回滚的真实数据库验证。

BREAKING CHANGE: 同步树 updateById 不再调用 save(E) 覆写,既有更新校验应迁移到正式 Modify 实体事件;save(E) 和 save(Collection) 执行完整树关系保存。

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant