提交 f2ebe6f0 authored 作者: mooncake's avatar mooncake

update

上级 fe03d45d
...@@ -38,7 +38,9 @@ func New() *gin.Engine { ...@@ -38,7 +38,9 @@ func New() *gin.Engine {
copier.Copy(&auth, c.Auth) copier.Copy(&auth, c.Auth)
}) })
validator.InstallTranslations() if err := validator.InstallTranslations(); err != nil {
logger.Fatalf("%+v", err)
}
r := gin.New() r := gin.New()
r.Use(middleware.CustomRecoveryWithLogger(logger.Get())) r.Use(middleware.CustomRecoveryWithLogger(logger.Get()))
......
package base
// import "strings"
// type Condition interface {
// SetWhere(k string, v []interface{})
// SetOr(k string, v []interface{})
// SetOrder(k string)
// SetJoinOn(t, on string) Condition
// }
// type GormCondition struct {
// GormPublic
// Join []*GormJoin
// }
// type GormPublic struct {
// Where map[string][]interface{}
// Order []string
// Or map[string][]interface{}
// }
// type GormJoin struct {
// Type string
// JoinOn string
// GormPublic
// }
// func (e *GormJoin) SetJoinOn(t, on string) Condition {
// return nil
// }
// func (e *GormPublic) SetWhere(k string, v []interface{}) {
// if e.Where == nil {
// e.Where = make(map[string][]interface{})
// }
// e.Where[k] = v
// }
// func (e *GormPublic) SetOr(k string, v []interface{}) {
// if e.Or == nil {
// e.Or = make(map[string][]interface{})
// }
// e.Or[k] = v
// }
// func (e *GormPublic) SetOrder(k string) {
// if e.Order == nil {
// e.Order = make([]string, 0)
// }
// e.Order = append(e.Order, k)
// }
// func (e *GormCondition) SetJoinOn(t, on string) Condition {
// if e.Join == nil {
// e.Join = make([]*GormJoin, 0)
// }
// join := &GormJoin{
// Type: t,
// JoinOn: on,
// GormPublic: GormPublic{},
// }
// e.Join = append(e.Join, join)
// return join
// }
// type resolveSearchTag struct {
// Type string
// Column string
// Table string
// On []string
// Join string
// }
// // makeTag 解析search的tag标签
// func makeTag(tag string) *resolveSearchTag {
// r := &resolveSearchTag{}
// tags := strings.Split(tag, ";")
// var ts []string
// for _, t := range tags {
// ts = strings.Split(t, ":")
// if len(ts) == 0 {
// continue
// }
// switch ts[0] {
// case "type":
// if len(ts) > 1 {
// r.Type = ts[1]
// }
// case "column":
// if len(ts) > 1 {
// r.Column = ts[1]
// }
// case "table":
// if len(ts) > 1 {
// r.Table = ts[1]
// }
// case "on":
// if len(ts) > 1 {
// r.On = ts[1:]
// }
// case "join":
// if len(ts) > 1 {
// r.Join = ts[1]
// }
// }
// }
// return r
// }
差异被折叠。
差异被折叠。
...@@ -11,7 +11,7 @@ import ( ...@@ -11,7 +11,7 @@ import (
"gitlab.wanzhuangkj.com/tush/xpkg/pkg/cache" "gitlab.wanzhuangkj.com/tush/xpkg/pkg/cache"
"gitlab.wanzhuangkj.com/tush/xpkg/pkg/encoding" "gitlab.wanzhuangkj.com/tush/xpkg/pkg/encoding"
"gitlab.wanzhuangkj.com/tush/xpkg/pkg/xerrors/xerror" "gitlab.wanzhuangkj.com/tush/xpkg/pkg/xerrors/xerror"
"gitlab.wanzhuangkj.com/tush/xpkg/xutils" utils "gitlab.wanzhuangkj.com/tush/xpkg/xutils"
"gitlab.wanzhuangkj.com/tush/xpkg/xutils/xsf" "gitlab.wanzhuangkj.com/tush/xpkg/xutils/xsf"
) )
...@@ -68,8 +68,7 @@ func (x *OCache[T]) Set(ctx context.Context, id xsf.ID, data *T, duration time.D ...@@ -68,8 +68,7 @@ func (x *OCache[T]) Set(ctx context.Context, id xsf.ID, data *T, duration time.D
return nil return nil
} }
cacheKey := getCacheKey(x.KeyPrefix, id.Int64()) cacheKey := getCacheKey(x.KeyPrefix, id.Int64())
err := x.Cache.Set(ctx, cacheKey, data, duration) if err := x.Cache.Set(ctx, cacheKey, data, duration); err != nil {
if err != nil {
return xerror.New(err.Error()) return xerror.New(err.Error())
} }
return nil return nil
...@@ -81,8 +80,7 @@ func (x *OCache[T]) Get(ctx context.Context, id xsf.ID) (*T, error) { ...@@ -81,8 +80,7 @@ func (x *OCache[T]) Get(ctx context.Context, id xsf.ID) (*T, error) {
} }
var data *T var data *T
cacheKey := getCacheKey(x.KeyPrefix, id.Int64()) cacheKey := getCacheKey(x.KeyPrefix, id.Int64())
err := x.Cache.Get(ctx, cacheKey, &data) if err := x.Cache.Get(ctx, cacheKey, &data); err != nil {
if err != nil {
return nil, xerror.New(err.Error()) return nil, xerror.New(err.Error())
} }
return data, nil return data, nil
...@@ -142,8 +140,7 @@ func (x *OCache[T]) MultiGet(ctx context.Context, ids []xsf.ID) (map[xsf.ID]int, ...@@ -142,8 +140,7 @@ func (x *OCache[T]) MultiGet(ctx context.Context, ids []xsf.ID) (map[xsf.ID]int,
func (x *OCache[T]) Del(ctx context.Context, id xsf.ID) error { func (x *OCache[T]) Del(ctx context.Context, id xsf.ID) error {
cacheKey := x.KeyPrefix + utils.Int64ToStr(id.Int64()) cacheKey := x.KeyPrefix + utils.Int64ToStr(id.Int64())
err := x.Cache.Del(ctx, cacheKey) if err := x.Cache.Del(ctx, cacheKey); err != nil {
if err != nil {
return xerror.New(err.Error()) return xerror.New(err.Error())
} }
return nil return nil
...@@ -158,8 +155,7 @@ func (x *OCache[T]) Dels(ctx context.Context, ids []xsf.ID) error { ...@@ -158,8 +155,7 @@ func (x *OCache[T]) Dels(ctx context.Context, ids []xsf.ID) error {
cacheKey := x.KeyPrefix + utils.Int64ToStr(id.Int64()) cacheKey := x.KeyPrefix + utils.Int64ToStr(id.Int64())
keys = append(keys, cacheKey) keys = append(keys, cacheKey)
} }
err := x.Cache.Del(ctx, keys...) if err := x.Cache.Del(ctx, keys...); err != nil {
if err != nil {
return xerror.New(err.Error()) return xerror.New(err.Error())
} }
return nil return nil
...@@ -167,8 +163,7 @@ func (x *OCache[T]) Dels(ctx context.Context, ids []xsf.ID) error { ...@@ -167,8 +163,7 @@ func (x *OCache[T]) Dels(ctx context.Context, ids []xsf.ID) error {
func (x *OCache[T]) SetPlaceholder(ctx context.Context, id xsf.ID) error { func (x *OCache[T]) SetPlaceholder(ctx context.Context, id xsf.ID) error {
cacheKey := x.KeyPrefix + utils.Int64ToStr(id.Int64()) cacheKey := x.KeyPrefix + utils.Int64ToStr(id.Int64())
err := x.Cache.SetCacheWithNotFound(ctx, cacheKey) if err := x.Cache.SetCacheWithNotFound(ctx, cacheKey); err != nil {
if err != nil {
return xerror.New(err.Error()) return xerror.New(err.Error())
} }
return nil return nil
......
...@@ -13,7 +13,7 @@ import ( ...@@ -13,7 +13,7 @@ import (
"gitlab.wanzhuangkj.com/tush/xpkg/pkg/sgorm/query" "gitlab.wanzhuangkj.com/tush/xpkg/pkg/sgorm/query"
"gitlab.wanzhuangkj.com/tush/xpkg/pkg/xerrors/xerror" "gitlab.wanzhuangkj.com/tush/xpkg/pkg/xerrors/xerror"
"gitlab.wanzhuangkj.com/tush/xpkg/xcommon/ocache" "gitlab.wanzhuangkj.com/tush/xpkg/xcommon/ocache"
"gitlab.wanzhuangkj.com/tush/xpkg/xutils" utils "gitlab.wanzhuangkj.com/tush/xpkg/xutils"
ctxutils "gitlab.wanzhuangkj.com/tush/xpkg/xutils/ctxutils" ctxutils "gitlab.wanzhuangkj.com/tush/xpkg/xutils/ctxutils"
setutils "gitlab.wanzhuangkj.com/tush/xpkg/xutils/setutils" setutils "gitlab.wanzhuangkj.com/tush/xpkg/xutils/setutils"
"gitlab.wanzhuangkj.com/tush/xpkg/xutils/xsf" "gitlab.wanzhuangkj.com/tush/xpkg/xutils/xsf"
...@@ -215,9 +215,7 @@ func (x *ODao[T]) updByIDTx(ctx context.Context, tx *gorm.DB, id xsf.ID, upd any ...@@ -215,9 +215,7 @@ func (x *ODao[T]) updByIDTx(ctx context.Context, tx *gorm.DB, id xsf.ID, upd any
return nil return nil
} }
var table T var table T
if err := tx.WithContext(ctx).Model(&table). if err := tx.WithContext(ctx).Model(&table).Where("id = ?", id).Updates(upd).Error; err != nil {
Where("id = ?", id).
Updates(upd).Error; err != nil {
return xerror.New(err.Error()) return xerror.New(err.Error())
} }
_ = x.deleteCache(ctx, id) _ = x.deleteCache(ctx, id)
......
package validator
// // Translation 设置Translation
// func Translation() gin.HandlerFunc {
// en := en.New()
// zh := zh.New()
// universalTranslator := ut.New(zh, zh, en)
// valid := validator.New()
// _ = valid.RegisterValidation("mobile", func(fl validator.FieldLevel) bool {
// regex := regexp2.MustCompile(`^1[3456789]\d{9}$`, 0)
// phone := fl.Field().String()
// matched, err := regex.MatchString(phone)
// if err != nil {
// return false
// }
// return matched
// })
// //自定义电话验证方法
// _ = valid.RegisterValidation("phone", func(fl validator.FieldLevel) bool {
// regex := regexp2.MustCompile(`^(\d{3,4}-)?\d{6,11}$`, 0)
// phone := fl.Field().String()
// matched, err := regex.MatchString(phone)
// if err != nil {
// return false
// }
// return matched
// })
// //自定义图片验证方法
// _ = valid.RegisterValidation("image", func(fl validator.FieldLevel) bool {
// file := fl.Field().Interface()
// if fileHeader, ok := file.(multipart.FileHeader); ok {
// contentType := fileHeader.Header.Get("content-type")
// for _, t := range []string{"image/jpeg", "image/png", "image/gif"} {
// if strings.HasPrefix(contentType, t) {
// return true
// }
// }
// }
// return false
// })
// return func(c *gin.Context) {
// //根据参数取翻译器实例
// locale := c.DefaultQuery("locale", "zh")
// trans, _ := universalTranslator.GetTranslator(locale)
// switch locale {
// case "en":
// _ = en_translations.RegisterDefaultTranslations(valid, trans)
// valid.RegisterTagNameFunc(func(fld reflect.StructField) string {
// return fld.Tag.Get("encomment")
// })
// default:
// _ = zh_translations.RegisterDefaultTranslations(valid, trans)
// valid.RegisterTagNameFunc(func(fld reflect.StructField) string {
// return fld.Tag.Get("comment")
// })
// _ = valid.RegisterTranslation("mobile", trans, func(ut ut.Translator) error {
// return ut.Add("mobile", "{0}填写不正确", true)
// }, func(ut ut.Translator, fe validator.FieldError) string {
// t, _ := ut.T("mobile", fe.Field())
// return t
// })
// _ = valid.RegisterTranslation("phone", trans, func(ut ut.Translator) error {
// return ut.Add("phone", "{0}填写不正确", true)
// }, func(ut ut.Translator, fe validator.FieldError) string {
// t, _ := ut.T("phone", fe.Field())
// return t
// })
// _ = valid.RegisterTranslation("image", trans, func(ut ut.Translator) error {
// return ut.Add("image", "请上传{0}", true)
// }, func(ut ut.Translator, fe validator.FieldError) string {
// t, _ := ut.T("image", fe.Field())
// return t
// })
// }
// c.Set(CtxKey_Translator, trans)
// c.Set(CtxKey_Validator, valid)
// c.Next()
// }
// }
...@@ -6,18 +6,76 @@ import ( ...@@ -6,18 +6,76 @@ import (
ut "github.com/go-playground/universal-translator" ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10" "github.com/go-playground/validator/v10"
zhTranslations "github.com/go-playground/validator/v10/translations/zh" zhTranslations "github.com/go-playground/validator/v10/translations/zh"
"gitlab.wanzhuangkj.com/tush/xpkg/pkg/logger" "gitlab.wanzhuangkj.com/tush/xpkg/pkg/xerrors/xerror"
) )
var Trans ut.Translator var (
Trans ut.Translator
fieldValidators = make(map[string]*FieldValidator)
)
// func init() {
// fv := FieldValidator{
// Key: "xtimeformat",
// Validation: func(fl validator.FieldLevel) bool {
// // field := fl.Field()
// // dateStr := field.String()
// // _, err := time.Parse("2006-01-02", dateStr)
// field := fl.Field()
// param := fl.Param()
// fmt.Println(field.Kind())
// for i := 0; i < field.NumField(); i++ {
// fmt.Println(field.Field(i))
// }
// if field.Kind() == reflect.String {
// _, err := time.Parse(param, field.String())
// return err == nil
// }
// return false
// },
// RegisterTranslation: func(ut ut.Translator) error {
// return ut.Add("xtimeformat", "{0} 必须是一个有效的日期,格式为 YYYY-MM-DD", true)
// },
// Translation: func(ut ut.Translator, fe validator.FieldError) string {
// t, _ := ut.T("xtimeformat", fe.Field())
// return t
// },
// }
// AddFieldValidator(&fv)
// }
func AddFieldValidator(v ...*FieldValidator) {
for _, item := range v {
fieldValidators[item.Key] = item
}
}
func InstallTranslations() { type FieldValidator struct {
Key string
Validation validator.Func
RegisterTranslation validator.RegisterTranslationsFunc
Translation validator.TranslationFunc
}
func InstallTranslations() error {
if v, ok := binding.Validator.Engine().(*validator.Validate); ok { if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
zhT := zh.New() zhT := zh.New()
uni := ut.New(zhT, zhT) uni := ut.New(zhT, zhT)
Trans, _ = uni.GetTranslator("zh") Trans, _ = uni.GetTranslator("zh")
if err := zhTranslations.RegisterDefaultTranslations(v, Trans); err != nil { if err := zhTranslations.RegisterDefaultTranslations(v, Trans); err != nil {
logger.Error("register translation failed ", logger.Err(err)) return xerror.Wrap(err, "register translation failed ")
}
for _, fv := range fieldValidators {
if err := v.RegisterValidation(fv.Key, fv.Validation); err != nil {
return err
}
if err := v.RegisterTranslation(fv.Key, Trans, fv.RegisterTranslation, fv.Translation); err != nil {
return err
}
} }
} }
return nil
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论