package validator import ( "RenewCMS/internal/domain/author" "RenewCMS/internal/domain/image" "RenewCMS/internal/domain/site" "reflect" "regexp" "github.com/go-playground/validator/v10" ) const inviteEmailTag = "inviteemail" const variantNameTag = "variantname" const siteKeyTag = "sitekey" const siteNameTag = "sitename" const AuthorNameTag = "authorname" const AuthorSlugTag = "authorslug" const SocialTypeTag = "socialtype" var inviteEmailPattern = regexp.MustCompile(`^[^\s@]+@[^\s@.]+(\.[^\s@.]+)+$`) var Validate *validator.Validate func InitValidator() { Validate = validator.New() _ = Validate.RegisterValidation(inviteEmailTag, isInviteEmail) _ = Validate.RegisterValidation(variantNameTag, isVariantName) _ = Validate.RegisterValidation(siteKeyTag, isSiteKey) _ = Validate.RegisterValidation(siteNameTag, isSiteName) _ = Validate.RegisterValidation(AuthorNameTag, isAuthorName, true) _ = Validate.RegisterValidation(AuthorSlugTag, isAuthorSlug, true) _ = Validate.RegisterValidation(SocialTypeTag, isSocialType, true) } func isAbsent(field validator.FieldLevel) bool { return field.Field().Kind() == reflect.Ptr && field.Field().IsNil() } func isAuthorName(field validator.FieldLevel) bool { return isAbsent(field) || author.IsValidName(field.Field().String()) } func isSocialType(field validator.FieldLevel) bool { return author.IsValidSocialType(field.Field().String()) } func isAuthorSlug(field validator.FieldLevel) bool { return isAbsent(field) || author.IsValidSlug(field.Field().String()) } func isSiteKey(field validator.FieldLevel) bool { return site.IsValidKey(field.Field().String()) } func isSiteName(field validator.FieldLevel) bool { return site.IsValidName(field.Field().String()) } func isVariantName(field validator.FieldLevel) bool { return image.IsValidVariantName(field.Field().String()) } func isInviteEmail(field validator.FieldLevel) bool { return inviteEmailPattern.MatchString(field.Field().String()) }