增加类型转换时顺序检测

This commit is contained in:
2025-09-14 15:47:08 +08:00
parent 4ddb2c5448
commit eb1be3f366
2 changed files with 489 additions and 14 deletions

View File

@@ -40,10 +40,10 @@ func PlanToResponse(plan *models.Plan) *PlanResponse {
return response
}
// PlanFromCreateRequest 将CreatePlanRequest转换为Plan模型
func PlanFromCreateRequest(req *CreatePlanRequest) *models.Plan {
// PlanFromCreateRequest 将CreatePlanRequest转换为Plan模型,并进行业务规则验证
func PlanFromCreateRequest(req *CreatePlanRequest) (*models.Plan, error) {
if req == nil {
return nil
return nil, nil
}
plan := &models.Plan{
@@ -60,7 +60,7 @@ func PlanFromCreateRequest(req *CreatePlanRequest) *models.Plan {
for i, childPlanID := range req.SubPlanIDs {
plan.SubPlans[i] = models.SubPlan{
ChildPlanID: childPlanID,
ExecutionOrder: i + 1, // 默认执行顺序
ExecutionOrder: i, // 默认执行顺序, ReorderSteps会再次确认
}
}
}
@@ -69,19 +69,27 @@ func PlanFromCreateRequest(req *CreatePlanRequest) *models.Plan {
if req.ContentType == models.PlanContentTypeTasks && req.Tasks != nil {
plan.Tasks = make([]models.Task, len(req.Tasks))
for i, taskReq := range req.Tasks {
// 使用来自请求的ExecutionOrder
plan.Tasks[i] = TaskFromRequest(&taskReq)
// 设置执行顺序
plan.Tasks[i].ExecutionOrder = i + 1
}
}
return plan
// 1. 首先,执行重复性验证
if err := plan.ValidateExecutionOrder(); err != nil {
// 如果检测到重复,立即返回错误
return nil, err
}
// 2. 然后,调用方法来修复顺序断层
plan.ReorderSteps()
return plan, nil
}
// PlanFromUpdateRequest 将UpdatePlanRequest转换为Plan模型
func PlanFromUpdateRequest(req *UpdatePlanRequest) *models.Plan {
// PlanFromUpdateRequest 将UpdatePlanRequest转换为Plan模型,并进行业务规则验证
func PlanFromUpdateRequest(req *UpdatePlanRequest) (*models.Plan, error) {
if req == nil {
return nil
return nil, nil
}
plan := &models.Plan{
@@ -98,7 +106,7 @@ func PlanFromUpdateRequest(req *UpdatePlanRequest) *models.Plan {
for i, childPlanID := range req.SubPlanIDs {
plan.SubPlans[i] = models.SubPlan{
ChildPlanID: childPlanID,
ExecutionOrder: i + 1, // 默认执行顺序
ExecutionOrder: i, // 默认执行顺序, ReorderSteps会再次确认
}
}
}
@@ -107,13 +115,21 @@ func PlanFromUpdateRequest(req *UpdatePlanRequest) *models.Plan {
if req.ContentType == models.PlanContentTypeTasks && req.Tasks != nil {
plan.Tasks = make([]models.Task, len(req.Tasks))
for i, taskReq := range req.Tasks {
// 使用来自请求的ExecutionOrder
plan.Tasks[i] = TaskFromRequest(&taskReq)
// 设置执行顺序
plan.Tasks[i].ExecutionOrder = i + 1
}
}
return plan
// 1. 首先,执行重复性验证
if err := plan.ValidateExecutionOrder(); err != nil {
// 如果检测到重复,立即返回错误
return nil, err
}
// 2. 然后,调用方法来修复顺序断层
plan.ReorderSteps()
return plan, nil
}
// SubPlanToResponse 将SubPlan模型转换为SubPlanResponse