generated from pkg/go-template
feat: move JsonApi handler、ErrorHandler、validator for param 2 pkg
continuous-integration/drone/push Build is passing
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
// Package validator 校验器集合包
|
||||
package validator
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"git.icechen.cn/monorepo/backend/pkg/third_party"
|
||||
"github.com/go-playground/locales/zh_Hans_CN"
|
||||
ut "github.com/go-playground/universal-translator"
|
||||
"github.com/go-playground/validator/v10"
|
||||
zh_translations "github.com/go-playground/validator/v10/translations/zh"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"reflect"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var Validate *validator.Validate
|
||||
var trans ut.Translator
|
||||
|
||||
func init() {
|
||||
Validate = validator.New()
|
||||
zh := zh_Hans_CN.New()
|
||||
uni := ut.New(zh, zh)
|
||||
var ok bool
|
||||
trans, ok = uni.GetTranslator("zh_Hans_CN")
|
||||
if !ok {
|
||||
panic(fmt.Errorf("uni.GetTranslator(%s) failed", "zh"))
|
||||
}
|
||||
Validate.RegisterTagNameFunc(func(field reflect.StructField) string {
|
||||
addWarp := func(tag string) string {
|
||||
return "[" + tag + "]"
|
||||
}
|
||||
if labelTag := field.Tag.Get("label"); labelTag != "" {
|
||||
return addWarp(labelTag)
|
||||
}
|
||||
if jsonTag := field.Tag.Get("json"); jsonTag != "" {
|
||||
return addWarp(jsonTag)
|
||||
}
|
||||
return addWarp(field.Name)
|
||||
})
|
||||
err := zh_translations.RegisterDefaultTranslations(Validate, trans)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func Bind(c *fiber.Ctx, out interface{}) error {
|
||||
if reflect.TypeOf(out).Kind() != reflect.Ptr {
|
||||
return third_party.NewFError("bind must ptr")
|
||||
}
|
||||
|
||||
if err := c.BodyParser(out); err != nil {
|
||||
return third_party.WarpFError(err)
|
||||
}
|
||||
|
||||
err := Validate.Struct(out)
|
||||
|
||||
if err != nil {
|
||||
if errs, ok := err.(validator.ValidationErrors); ok {
|
||||
errString := make([]string, 0, len(errs))
|
||||
for _, fieldError := range errs.Translate(trans) {
|
||||
errString = append(errString, fieldError)
|
||||
}
|
||||
err = fmt.Errorf("%s", strings.Join(errString, ","))
|
||||
}
|
||||
return third_party.WarpFErrorWithCode(fiber.StatusBadRequest, err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user