/
AngelCareMe
/
task_queue
Обзор
Документация
Войти
/
AngelCareMe
/
task_queue
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
pkg/validator/validation.go
87 строк
2 KB
AngelCareMe
done
28 июл 2025, 21:07
28 июл 2025, 21:07
c70014b
Код
Авторство
О чём код?
package validator import ( "fmt" "reflect" "strings" "github.com/go-playground/validator/v10" "github.com/sirupsen/logrus" ) var validate *validator.Validate var logger *logrus.Logger func SetLogger(l *logrus.Logger) { logger = l } func init() { validate = validator.New() validate.RegisterTagNameFunc(func(fld reflect.StructField) string { name := strings.SplitN(fld.Tag.Get("json"), ",", 2)[0] if name == "-" { return "" } return name }) } func ValidateStruct(s interface{}) error { if logger == nil { logger = logrus.StandardLogger() } err := validate.Struct(s) if err != nil { validationErrs, ok := err.(validator.ValidationErrors) if !ok { logger.WithError(err).Error("unexpected validation error type") return fmt.Errorf("validation error: %w", err) } var errors ValidationErrors for _, fieldErr := range validationErrs { validationError := ValidationError{ Field: fieldErr.Field(), Value: fieldErr.Value(), Tag: fieldErr.Tag(), Param: fieldErr.Param(), } validationError.Message = buildErrorMessage(fieldErr) errors = append(errors, validationError) logger.WithFields(logrus.Fields{ "field": validationError.Field, "value": validationError.Value, "tag": validationError.Tag, "param": validationError.Param, "error": validationError.Message, }).Debug("validation error") } return errors } return nil } func buildErrorMessage(fe validator.FieldError) string { switch fe.Tag() { case "required": return "this field is required" case "min": return fmt.Sprintf("this field must be greater than or equal to %s", fe.Param()) case "max": return fmt.Sprintf("this field must be less than or equal to %s", fe.Param()) case "len": return fmt.Sprintf("this field must be exactly %s characters long", fe.Param()) case "email": return "this field must be a valid email address" case "url": return "this field must be a valid URL" default: return fmt.Sprintf("field validation failed on tag '%s'", fe.Tag()) } }