1. 增加重复顺序校验
2. 增加测试用例
This commit is contained in:
@@ -125,6 +125,11 @@ func (r *gormPlanRepository) Create(plan *models.Plan) error {
|
||||
return ErrMixedContent
|
||||
}
|
||||
|
||||
// 检查是否有重复的执行顺序
|
||||
if err := plan.ValidateExecutionOrder(); err != nil {
|
||||
return fmt.Errorf("计划 (ID: %d) 的执行顺序无效: %w", plan.ID, err)
|
||||
}
|
||||
|
||||
// 如果是子计划类型,验证所有子计划是否存在且ID不为0
|
||||
if plan.ContentType == models.PlanContentTypeSubPlans {
|
||||
childIDsToValidate := make(map[uint]bool)
|
||||
@@ -156,28 +161,6 @@ func (r *gormPlanRepository) Create(plan *models.Plan) error {
|
||||
if err := tx.Create(plan).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 3. 处理子计划关联 (如果 ContentType 是 sub_plans)
|
||||
// GORM 不会自动创建 SubPlan 关联记录,需要手动处理
|
||||
if plan.ContentType == models.PlanContentTypeSubPlans {
|
||||
// 收集所有 SubPlan 关联,设置 ParentPlanID
|
||||
var subPlanLinksToCreate []models.SubPlan
|
||||
for i := range plan.SubPlans {
|
||||
plan.SubPlans[i].ParentPlanID = plan.ID // 设置父计划ID
|
||||
// 确保 ChildPlanID 被正确设置,因为 ChildPlan 对象可能只在内存中
|
||||
if plan.SubPlans[i].ChildPlanID == 0 && plan.SubPlans[i].ChildPlan != nil {
|
||||
plan.SubPlans[i].ChildPlanID = plan.SubPlans[i].ChildPlan.ID
|
||||
}
|
||||
subPlanLinksToCreate = append(subPlanLinksToCreate, plan.SubPlans[i])
|
||||
}
|
||||
|
||||
// 批量创建 SubPlan 关联记录
|
||||
if len(subPlanLinksToCreate) > 0 {
|
||||
if err := tx.CreateInBatches(subPlanLinksToCreate, 100).Error; err != nil { // 批量大小100
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
@@ -214,7 +197,12 @@ func (r *gormPlanRepository) validatePlanTree(tx *gorm.DB, plan *models.Plan) er
|
||||
return err
|
||||
}
|
||||
|
||||
// 3. 一次性数据库存在性校验
|
||||
// 3. 检查是否有重复的执行顺序
|
||||
if err := plan.ValidateExecutionOrder(); err != nil {
|
||||
return fmt.Errorf("计划 (ID: %d) 的执行顺序无效: %w", plan.ID, err)
|
||||
}
|
||||
|
||||
// 4. 一次性数据库存在性校验
|
||||
var idsToCheck []uint
|
||||
for id := range allIDs {
|
||||
idsToCheck = append(idsToCheck, id)
|
||||
@@ -229,7 +217,6 @@ func (r *gormPlanRepository) validatePlanTree(tx *gorm.DB, plan *models.Plan) er
|
||||
return ErrNodeDoesNotExist
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user