From ed69cc23671e853593da02ecb8733e8975641539 Mon Sep 17 00:00:00 2001 From: "daniel.w" Date: Fri, 2 Aug 2024 09:39:58 +0800 Subject: [PATCH] feat: finish member func --- internal/lib/required/validate.go | 39 +++++++++++++++++++----- internal/lib/required/validate_option.go | 12 -------- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/internal/lib/required/validate.go b/internal/lib/required/validate.go index f21031c..4bbbf59 100644 --- a/internal/lib/required/validate.go +++ b/internal/lib/required/validate.go @@ -1,10 +1,22 @@ package required -import "github.com/go-playground/validator/v10" +import ( + "fmt" + "github.com/go-playground/validator/v10" +) + +type Validate interface { + ValidateAll(obj any) error + BindToValidator(opts ...Option) error +} + +type Validator struct { + V *validator.Validate +} // ValidateAll TODO 要移到common 包 -func ValidateAll(validate *validator.Validate, obj any) error { - err := validate.Struct(obj) +func (v *Validator) ValidateAll(obj any) error { + err := v.V.Struct(obj) if err != nil { return err } @@ -12,10 +24,23 @@ func ValidateAll(validate *validator.Validate, obj any) error { return nil } -func MustValidator(option ...Option) *validator.Validate { - // TODO Validator 要抽出來 - v := validator.New() - err := BindToValidator(v, option...) +func (v *Validator) BindToValidator(opts ...Option) error { + for _, item := range opts { + err := v.V.RegisterValidation(item.ValidatorName, item.ValidatorFunc) + if err != nil { + return fmt.Errorf("failed to register validator : %w", err) + } + } + + return nil +} + +func MustValidator(option ...Option) Validate { + v := &Validator{ + V: validator.New(), + } + + err := v.BindToValidator(option...) if err != nil { // log } diff --git a/internal/lib/required/validate_option.go b/internal/lib/required/validate_option.go index 24851ab..8a896cb 100644 --- a/internal/lib/required/validate_option.go +++ b/internal/lib/required/validate_option.go @@ -1,7 +1,6 @@ package required import ( - "fmt" "regexp" "github.com/go-playground/validator/v10" @@ -12,17 +11,6 @@ type Option struct { ValidatorFunc func(fl validator.FieldLevel) bool } -func BindToValidator(v *validator.Validate, opts ...Option) error { - for _, item := range opts { - err := v.RegisterValidation(item.ValidatorName, item.ValidatorFunc) - if err != nil { - return fmt.Errorf("failed to register validator : %w", err) - } - } - - return nil -} - // WithAccount 創建一個新的 Option 結構,包含自定義的驗證函數,用於驗證 email 和台灣的手機號碼格式 func WithAccount(tagName string) Option { return Option{