限制用户不能创建一个既有子计划又有步骤的计划

This commit is contained in:
2025-09-10 19:36:34 +08:00
parent 91f160b07e
commit 6fe73d8ffe

View File

@@ -4,6 +4,7 @@
package feed package feed
import ( import (
"fmt"
"strconv" "strconv"
"git.huangwc.com/pig/pig-farm-controller/internal/controller" "git.huangwc.com/pig/pig-farm-controller/internal/controller"
@@ -73,6 +74,12 @@ func (c *Controller) Create(ctx *gin.Context) {
return return
} }
// 校验计划结构
if err := c.validatePlanStructure(&req); err != nil {
controller.SendErrorResponse(ctx, controller.InvalidParameterCode, "计划结构错误: "+err.Error())
return
}
// 转换请求结构体为模型 // 转换请求结构体为模型
plan := c.convertToCreateModel(&req) plan := c.convertToCreateModel(&req)
@@ -86,6 +93,23 @@ func (c *Controller) Create(ctx *gin.Context) {
controller.SendSuccessResponse(ctx, "创建计划成功", nil) controller.SendSuccessResponse(ctx, "创建计划成功", nil)
} }
// validatePlanStructure 校验计划结构,不允许计划同时包含步骤和子计划
func (c *Controller) validatePlanStructure(req *CreateRequest) error {
// 检查当前计划是否同时包含步骤和子计划
if len(req.Steps) > 0 && len(req.SubPlans) > 0 {
return fmt.Errorf("计划不能同时包含步骤和子计划")
}
// 递归检查子计划
for _, subPlan := range req.SubPlans {
if err := c.validatePlanStructure(&subPlan); err != nil {
return err
}
}
return nil
}
// convertToCreateModel 将创建请求结构体转换为数据库模型 // convertToCreateModel 将创建请求结构体转换为数据库模型
func (c *Controller) convertToCreateModel(req *CreateRequest) *model.FeedingPlan { func (c *Controller) convertToCreateModel(req *CreateRequest) *model.FeedingPlan {
plan := &model.FeedingPlan{ plan := &model.FeedingPlan{
@@ -334,6 +358,12 @@ func (c *Controller) Update(ctx *gin.Context) {
return return
} }
// 校验计划结构
if err := c.validateUpdatePlanStructure(&req); err != nil {
controller.SendErrorResponse(ctx, controller.InvalidParameterCode, "计划结构错误: "+err.Error())
return
}
// 转换请求结构体为模型 // 转换请求结构体为模型
plan := c.convertToUpdateModel(&req) plan := c.convertToUpdateModel(&req)
@@ -347,6 +377,23 @@ func (c *Controller) Update(ctx *gin.Context) {
controller.SendSuccessResponse(ctx, "更新计划成功", nil) controller.SendSuccessResponse(ctx, "更新计划成功", nil)
} }
// validateUpdatePlanStructure 校验更新计划结构,不允许计划同时包含步骤和子计划
func (c *Controller) validateUpdatePlanStructure(req *UpdateRequest) error {
// 检查当前计划是否同时包含步骤和子计划
if len(req.Steps) > 0 && len(req.SubPlans) > 0 {
return fmt.Errorf("计划不能同时包含步骤和子计划")
}
// 递归检查子计划
for _, subPlan := range req.SubPlans {
if err := c.validateUpdatePlanStructure(&subPlan); err != nil {
return err
}
}
return nil
}
// convertToUpdateModel 将更新请求结构体转换为数据库模型 // convertToUpdateModel 将更新请求结构体转换为数据库模型
func (c *Controller) convertToUpdateModel(req *UpdateRequest) *model.FeedingPlan { func (c *Controller) convertToUpdateModel(req *UpdateRequest) *model.FeedingPlan {
plan := &model.FeedingPlan{ plan := &model.FeedingPlan{