REQ-3540: 校验深度

This commit is contained in:
yanglin 2025-03-24 15:27:35 +08:00
parent 0330080d23
commit e901ce392b
2 changed files with 11 additions and 5 deletions

View File

@ -193,6 +193,8 @@ public class IndexManager {
public Future<IndexNode> asyncMove(String srcCode, @Nullable String destParentCode) {
IndexNode srcNode = getOrThrow(srcCode);
IndexNode destParentNode = determineDestParentNode(srcNode, destParentCode, "移动");
if (destParentNode != null)
indexSupport.validateDepthWhenAddChild(destParentNode);
return async(() -> transaction.execute(unused -> {
docLogDao.log("indexNode:asyncMove", srcCode, "srcCode", srcCode, "destParentCode", destParentCode);
if (docProps.isLockSubtreeWhenMove())

View File

@ -93,12 +93,16 @@ public class IndexSupport {
"创建子节点时父子scope不匹配: {}", child.nodeScope().scope());
BizAssertions.assertEquals(parent.getScopeCode(), child.nodeScope().scopeCode(), //
"创建子节点时父子scopeCode不匹配: {}", child.parentCode());
BizAssertions.assertTrue(
indexNodeDao.validChildrenCount(parent.getCode()) < docProps.getIndexNodeMaxChildrenSize(),
"创建失败, 子节点数量不能超过 {}", docProps.getIndexNodeMaxChildrenSize());
validateDepthWhenAddChild(parent);
if (!parent.isRoot() && limitChildrenCount(child))
BizAssertions.assertTrue(parent.path().depth() < docProps.getIndexNodeMaxDepth(), //
"节点深度超过限制{}, 无法再创建新节点", docProps.getIndexNodeMaxDepth());
BizAssertions.assertTrue(
indexNodeDao.validChildrenCount(parent.getCode()) < docProps.getIndexNodeMaxChildrenSize(),
"创建失败, 子节点数量不能超过 {}", docProps.getIndexNodeMaxChildrenSize());
}
public void validateDepthWhenAddChild(IndexNode parent) {
BizAssertions.assertTrue(parent.path().depth() < docProps.getIndexNodeMaxDepth(), //
"节点深度超过限制{}, 无法再创建新节点", docProps.getIndexNodeMaxDepth());
}
List<IndexNode> collectValidSubtreeAsValueRoot(IndexNode srcNode) {