diff --git a/internal/controller/feed/feed.go b/internal/controller/feed/feed.go index 13d7ff8..ee883df 100644 --- a/internal/controller/feed/feed.go +++ b/internal/controller/feed/feed.go @@ -4,6 +4,7 @@ package feed import ( + "fmt" "strconv" "git.huangwc.com/pig/pig-farm-controller/internal/controller" @@ -73,6 +74,12 @@ func (c *Controller) Create(ctx *gin.Context) { return } + // 校验计划结构 + if err := c.validatePlanStructure(&req); err != nil { + controller.SendErrorResponse(ctx, controller.InvalidParameterCode, "计划结构错误: "+err.Error()) + return + } + // 转换请求结构体为模型 plan := c.convertToCreateModel(&req) @@ -86,6 +93,23 @@ func (c *Controller) Create(ctx *gin.Context) { 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 将创建请求结构体转换为数据库模型 func (c *Controller) convertToCreateModel(req *CreateRequest) *model.FeedingPlan { plan := &model.FeedingPlan{ @@ -334,6 +358,12 @@ func (c *Controller) Update(ctx *gin.Context) { return } + // 校验计划结构 + if err := c.validateUpdatePlanStructure(&req); err != nil { + controller.SendErrorResponse(ctx, controller.InvalidParameterCode, "计划结构错误: "+err.Error()) + return + } + // 转换请求结构体为模型 plan := c.convertToUpdateModel(&req) @@ -347,6 +377,23 @@ func (c *Controller) Update(ctx *gin.Context) { 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 将更新请求结构体转换为数据库模型 func (c *Controller) convertToUpdateModel(req *UpdateRequest) *model.FeedingPlan { plan := &model.FeedingPlan{