2024-10-13 13:31:58 +04:00

61 lines
1.2 KiB
Go

package http
import (
"fmt"
"reflect"
"github.com/go-playground/validator/v10"
)
type fieldError struct {
Field string
Message string
}
func NewValidator() *validator.Validate {
validate := validator.New()
validate.RegisterTagNameFunc(func(fld reflect.StructField) string {
if fld.Tag.Get("validation_name") != "" {
return fld.Tag.Get("validation_name")
} else {
return fld.Tag.Get("json")
}
})
return validate
}
func validationErrorFormater(errs validator.ValidationErrors) []fieldError {
fieldErrs := make([]fieldError, 0)
if errs != nil {
for _, err := range errs {
fieldErrs = append(
fieldErrs,
fieldError{
Field: err.Field(),
Message: msgForTag(err.Tag(), err.Field(), err.Param()),
},
)
}
return fieldErrs
}
return nil
}
func msgForTag(tag, field, param string) string {
switch tag {
case "required":
return fmt.Sprintf("%s is required", field)
case "email":
return "email is invalid"
case "min":
return fmt.Sprintf("The length of %s must be at least %s", field, param)
case "max":
return fmt.Sprintf("The length of %s must be at most %s", field, param)
default:
return fmt.Sprintf("%s is invalid", field)
}
}