限制用户不能创建一个既有子计划又有步骤的计划
This commit is contained in:
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user