修复(#8): 分组管理核心缺陷与测试覆盖 (#11)

Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
2026-06-04 03:13:38 -07:00
committed by GitHub
parent 377f13da48
commit 34cd1c524e
10 changed files with 510 additions and 74 deletions
@@ -7,6 +7,7 @@ import (
"github.com/perfect-panel/server/internal/model/group"
"github.com/perfect-panel/server/internal/model/node"
"github.com/perfect-panel/server/internal/model/subscribe"
"github.com/perfect-panel/server/internal/svc"
"github.com/perfect-panel/server/internal/types"
"github.com/perfect-panel/server/pkg/logger"
@@ -48,6 +49,33 @@ func (l *DeleteNodeGroupLogic) DeleteNodeGroup(req *types.DeleteNodeGroupRequest
return fmt.Errorf("cannot delete group with %d associated nodes, please migrate nodes first", nodeCount)
}
var defaultSubscribeCount int64
if err := l.svcCtx.DB.Model(&subscribe.Subscribe{}).Where("node_group_id = ?", nodeGroup.Id).Count(&defaultSubscribeCount).Error; err != nil {
logger.Errorf("failed to count subscribes with default group: %v", err)
return err
}
if defaultSubscribeCount > 0 {
return fmt.Errorf("cannot delete group referenced by %d subscribes' default node group", defaultSubscribeCount)
}
var subscribeGroupCount int64
if err := l.svcCtx.DB.Model(&subscribe.Subscribe{}).Where("JSON_CONTAINS(node_group_ids, ?)", fmt.Sprintf("[%d]", nodeGroup.Id)).Count(&subscribeGroupCount).Error; err != nil {
logger.Errorf("failed to count subscribes in group: %v", err)
return err
}
if subscribeGroupCount > 0 {
return fmt.Errorf("cannot delete group referenced by %d subscribes' node group list", subscribeGroupCount)
}
var userSubscribeCount int64
if err := l.svcCtx.DB.Table("user_subscribe").Where("node_group_id = ?", nodeGroup.Id).Count(&userSubscribeCount).Error; err != nil {
logger.Errorf("failed to count user subscribes in group: %v", err)
return err
}
if userSubscribeCount > 0 {
return fmt.Errorf("cannot delete group referenced by %d user subscribes", userSubscribeCount)
}
// 使用 GORM Transaction 删除节点组
return l.svcCtx.DB.Transaction(func(tx *gorm.DB) error {
// 删除节点组