yjp 1 жил өмнө
parent
commit
4c8b692241

+ 17 - 5
framework/core/tag/check/validate.go

@@ -11,6 +11,10 @@ import (
 	"time"
 )
 
+const (
+	timeNotZeroTag = "timenotzero"
+)
+
 var validate = validator.New(validator.WithRequiredStructEnabled())
 var translator ut.Translator
 
@@ -32,7 +36,7 @@ func init() {
 }
 
 func registerCustomTags() {
-	if err := validate.RegisterValidation("timenotzero", func(fl validator.FieldLevel) bool {
+	if err := validate.RegisterValidation(timeNotZeroTag, func(fl validator.FieldLevel) bool {
 		fieldValue := fl.Field()
 
 		if !fieldValue.IsValid() {
@@ -41,13 +45,13 @@ func registerCustomTags() {
 
 		switch value := fieldValue.Interface().(type) {
 		case time.Time:
-			return value.IsZero()
+			return !value.IsZero()
 		case *time.Time:
-			if value == nil {
+			if value != nil {
 				return true
 			}
 
-			return value.IsZero()
+			return !value.IsZero()
 		default:
 			return false
 		}
@@ -175,5 +179,13 @@ func (result Result) translation() Result {
 		return result
 	}
 
-	return newResult(result.err, validationErrors.Translate(translator), result.fieldNameMap)
+	translatedErrors := validationErrors.Translate(translator)
+
+	for _, validationError := range validationErrors {
+		if validationError.Tag() == timeNotZeroTag {
+			translatedErrors[validationError.Field()] = validationError.Field() + "使用了时间零值"
+		}
+	}
+
+	return newResult(result.err, translatedErrors, result.fieldNameMap)
 }

+ 77 - 4
test/check_tag_test.go

@@ -1,11 +1,84 @@
 package test
 
-import "testing"
+import (
+	"git.sxidc.com/go-framework/baize/framework/core/tag/check"
+	"github.com/pkg/errors"
+	"strings"
+	"testing"
+	"time"
+)
 
-//type CheckStruct {
-//
-//}
+type CustomCheckTagStruct struct {
+	Time time.Time `check:"timenotzero"`
+}
+
+type CustomCheckTagPointerStruct struct {
+	Time *time.Time `check:"timenotzero"`
+}
+
+var fieldMap = map[string]string{
+	"Time": "测试时间",
+}
 
 func TestCustomCheckTag(t *testing.T) {
+	now := time.Now().Local()
+
+	customCheckTagStruct := CustomCheckTagStruct{
+		Time: now,
+	}
+
+	customCheckTagPointerStruct := CustomCheckTagPointerStruct{
+		Time: &now,
+	}
+
+	customCheckTagStructZero := CustomCheckTagStruct{}
+	customCheckTagPointerStructZero := CustomCheckTagPointerStruct{}
+
+	err := check.Struct(customCheckTagStruct, fieldMap).
+		CheckFields("Time")
+	if err != nil {
+		t.Fatalf("%+v", errors.Errorf(err.Error()))
+	}
+
+	err = check.Struct(customCheckTagPointerStruct, fieldMap).
+		CheckFields("Time")
+	if err != nil {
+		t.Fatalf("%+v", errors.Errorf(err.Error()))
+	}
+
+	err = check.Struct(&customCheckTagStruct, fieldMap).
+		CheckFields("Time")
+	if err != nil {
+		t.Fatalf("%+v", errors.Errorf(err.Error()))
+	}
+
+	err = check.Struct(&customCheckTagPointerStruct, fieldMap).
+		CheckFields("Time")
+	if err != nil {
+		t.Fatalf("%+v", errors.Errorf(err.Error()))
+	}
+
+	err = check.Struct(customCheckTagStructZero, fieldMap).
+		CheckFields("Time")
+	if err == nil || !strings.Contains(err.Error(), "使用了时间零值") {
+		t.Fatalf("%+v", errors.Errorf(err.Error()))
+	}
+
+	err = check.Struct(customCheckTagPointerStructZero, fieldMap).
+		CheckFields("Time")
+	if err == nil || !strings.Contains(err.Error(), "使用了时间零值") {
+		t.Fatalf("%+v", errors.Errorf(err.Error()))
+	}
+
+	err = check.Struct(&customCheckTagStructZero, fieldMap).
+		CheckFields("Time")
+	if err == nil || !strings.Contains(err.Error(), "使用了时间零值") {
+		t.Fatalf("%+v", errors.Errorf(err.Error()))
+	}
 
+	err = check.Struct(&customCheckTagPointerStructZero, fieldMap).
+		CheckFields("Time")
+	if err == nil || !strings.Contains(err.Error(), "使用了时间零值") {
+		t.Fatalf("%+v", errors.Errorf(err.Error()))
+	}
 }