Parcourir la source

Merge branch 'master' into dev

yjp il y a 1 an
Parent
commit
7eedc2497d
2 fichiers modifiés avec 38 ajouts et 0 suppressions
  1. 8 0
      README.md
  2. 30 0
      framework/core/tag/check/validate.go

+ 8 - 0
README.md

@@ -187,6 +187,14 @@ binding是一种机制,围绕应用将API,基础设施以及领域进行绑
 | trimPrefix | 字段如果是string,可以指定需要trim前缀的字符,trim前缀后赋值,不能包含';',如果使用特殊字符,如'\n','\t'等,需要使用''包含,不能以'作为开始和结尾字符              |
 | trimSuffix | 字段如果是string,可以指定需要trim后缀的字符,trim后缀后赋值,不能包含';',如果使用特殊字符,如'\n','\t'等,需要使用''包含,不能以'作为开始和结尾字符              |
 
+### 7.3 check
+
+check封装了validator包,在validator包基础上扩展了自己的tag
+
+| Tag      | 说明            |
+|----------|---------------|
+| timezero | 判断time是否为zero |
+
 ## 8. 便捷包
 
 便捷包主要为了简化开发,一般均以可配置的方式定义方法,提供服务和网关两方面的便捷包,搭配使用。目前支持的便捷包主要有以下几个:

+ 30 - 0
framework/core/tag/check/validate.go

@@ -1,12 +1,14 @@
 package check
 
 import (
+	"fmt"
 	"github.com/go-playground/locales/zh"
 	ut "github.com/go-playground/universal-translator"
 	"github.com/go-playground/validator/v10"
 	zhTranslations "github.com/go-playground/validator/v10/translations/zh"
 	"github.com/pkg/errors"
 	"strings"
+	"time"
 )
 
 var validate = validator.New(validator.WithRequiredStructEnabled())
@@ -25,6 +27,34 @@ func init() {
 	}
 
 	translator = trans
+
+	registerCustomTags()
+}
+
+func registerCustomTags() {
+	if err := validate.RegisterValidation("timezero", func(fl validator.FieldLevel) bool {
+		fieldValue := fl.Field()
+
+		if !fieldValue.IsValid() {
+			return true
+		}
+
+		switch value := fieldValue.Interface().(type) {
+		case time.Time:
+			return value.IsZero()
+		case *time.Time:
+			if value == nil {
+				return true
+			}
+
+			return value.IsZero()
+		default:
+			return false
+		}
+	}); err != nil {
+		fmt.Println(err)
+		return
+	}
 }
 
 func Struct(obj any, fieldNameMap map[string]string) Result {