Files
platform/web/globals/validator.go

56 lines
1.2 KiB
Go

package globals
import (
"errors"
"strings"
"github.com/go-playground/locales/zh"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
zhtrans "github.com/go-playground/validator/v10/translations/zh"
"github.com/gofiber/fiber/v2"
)
var Validator *ValidatorHolder
type ValidatorHolder struct {
validator *validator.Validate
translator ut.Translator
}
func (v *ValidatorHolder) Validate(c *fiber.Ctx, data any) error {
if err := c.BodyParser(data); err != nil {
return err
}
if errs := v.validator.Struct(data); errs != nil {
var sb = strings.Builder{}
var typeErrs validator.ValidationErrors
errors.As(errs, &typeErrs)
for i, err := range typeErrs {
sb.WriteString(err.Translate(v.translator))
if i < len(typeErrs)-1 {
sb.WriteString("\n")
}
}
return fiber.NewError(fiber.StatusBadRequest, sb.String())
}
return nil
}
func InitValidator() {
var validate = validator.New(validator.WithRequiredStructEnabled())
var translator = ut.New(zh.New()).GetFallback()
err := zhtrans.RegisterDefaultTranslations(validate, translator)
if err != nil {
panic(err)
}
Validator = &ValidatorHolder{
validator: validate,
translator: translator,
}
}