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