From c14d0ab87c0296675c23f07eb94353f2751a3eb9 Mon Sep 17 00:00:00 2001 From: JIeJaitt <498938874@qq.com> Date: Tue, 18 Mar 2025 16:42:00 +0800 Subject: [PATCH] =?UTF-8?q?Revert=20"=F0=9F=94=A5=20Feature:=20Enhance=20C?= =?UTF-8?q?heckConstraint=20method=20for=20improved=20error=20handling"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 68e8777b4cdb10702c3511a65ba76986a379a188. --- path.go | 114 +++++++++++++++++--------------------------------------- 1 file changed, 34 insertions(+), 80 deletions(-) diff --git a/path.go b/path.go index 67b4457f..b188a41c 100644 --- a/path.go +++ b/path.go @@ -672,18 +672,12 @@ func getParamConstraintType(constraintPart string) TypeConstraint { } } -// CheckConstraint validates if a param matches the given constraint -// Returns true if the param passes the constraint check, false otherwise +//nolint:errcheck // TODO: Properly check _all_ errors in here, log them & immediately return func (c *Constraint) CheckConstraint(param string) bool { - // First check if there's a custom constraint with the same name - // This allows custom constraints to override built-in constraints - for _, cc := range c.customConstraints { - if cc.Name() == c.Name { - return cc.Execute(param, c.Data...) - } - } + var err error + var num int - // Validate constraint has required data + // check data exists needOneData := []TypeConstraint{minLenConstraint, maxLenConstraint, lenConstraint, minConstraint, maxConstraint, datetimeConstraint, regexConstraint} needTwoData := []TypeConstraint{betweenLenConstraint, rangeConstraint} @@ -699,23 +693,20 @@ func (c *Constraint) CheckConstraint(param string) bool { } } - // Check constraints + // check constraints switch c.ID { case noConstraint: - // If we reach here with noConstraint, it means we didn't find a matching custom constraint above - return false + for _, cc := range c.customConstraints { + if cc.Name() == c.Name { + return cc.Execute(param, c.Data...) + } + } case intConstraint: - if _, err := strconv.Atoi(param); err != nil { - return false - } + _, err = strconv.Atoi(param) case boolConstraint: - if _, err := strconv.ParseBool(param); err != nil { - return false - } + _, err = strconv.ParseBool(param) case floatConstraint: - if _, err := strconv.ParseFloat(param, 32); err != nil { - return false - } + _, err = strconv.ParseFloat(param, 32) case alphaConstraint: for _, r := range param { if !unicode.IsLetter(r) { @@ -723,98 +714,61 @@ func (c *Constraint) CheckConstraint(param string) bool { } } case guidConstraint: - if _, err := uuid.Parse(param); err != nil { - return false - } + _, err = uuid.Parse(param) case minLenConstraint: - data, err := strconv.Atoi(c.Data[0]) - if err != nil { - return false - } + data, _ := strconv.Atoi(c.Data[0]) + if len(param) < data { return false } case maxLenConstraint: - data, err := strconv.Atoi(c.Data[0]) - if err != nil { - return false - } + data, _ := strconv.Atoi(c.Data[0]) + if len(param) > data { return false } case lenConstraint: - data, err := strconv.Atoi(c.Data[0]) - if err != nil { - return false - } + data, _ := strconv.Atoi(c.Data[0]) + if len(param) != data { return false } case betweenLenConstraint: - data, err := strconv.Atoi(c.Data[0]) - if err != nil { - return false - } - data2, err := strconv.Atoi(c.Data[1]) - if err != nil { - return false - } + data, _ := strconv.Atoi(c.Data[0]) + data2, _ := strconv.Atoi(c.Data[1]) length := len(param) if length < data || length > data2 { return false } case minConstraint: - data, err := strconv.Atoi(c.Data[0]) - if err != nil { - return false - } - num, err := strconv.Atoi(param) - if err != nil { - return false - } + data, _ := strconv.Atoi(c.Data[0]) + num, err = strconv.Atoi(param) + if num < data { return false } case maxConstraint: - data, err := strconv.Atoi(c.Data[0]) - if err != nil { - return false - } - num, err := strconv.Atoi(param) - if err != nil { - return false - } + data, _ := strconv.Atoi(c.Data[0]) + num, err = strconv.Atoi(param) + if num > data { return false } case rangeConstraint: - data, err := strconv.Atoi(c.Data[0]) - if err != nil { - return false - } - data2, err := strconv.Atoi(c.Data[1]) - if err != nil { - return false - } - num, err := strconv.Atoi(param) - if err != nil { - return false - } + data, _ := strconv.Atoi(c.Data[0]) + data2, _ := strconv.Atoi(c.Data[1]) + num, err = strconv.Atoi(param) + if num < data || num > data2 { return false } case datetimeConstraint: - if _, err := time.Parse(c.Data[0], param); err != nil { - return false - } + _, err = time.Parse(c.Data[0], param) case regexConstraint: - if c.RegexCompiler == nil { - return false - } if match := c.RegexCompiler.MatchString(param); !match { return false } } - return true + return err == nil }