47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package validate_controllers
|
||
|
||
import (
|
||
"reflect"
|
||
|
||
"github.com/go-playground/validator/v10"
|
||
"github.com/gofiber/fiber/v2"
|
||
"penahub.gitlab.yandexcloud.net/backend/verification/internal/models"
|
||
)
|
||
|
||
var validate = validator.New()
|
||
|
||
type Route struct {
|
||
Method string
|
||
Path string
|
||
Name string
|
||
Handler fiber.Handler
|
||
}
|
||
|
||
// validateStruct - возвращает строку с ошибкой, если структура не прошла валидацию.
|
||
func ValidateStruct(s any) []*models.RespErrorValidate {
|
||
err := validate.Struct(s)
|
||
|
||
var errorsValidate []*models.RespErrorValidate
|
||
if err != nil {
|
||
for _, err := range err.(validator.ValidationErrors) {
|
||
field := err.Field()
|
||
|
||
r, _ := reflect.TypeOf(s).Elem().FieldByName(err.Field())
|
||
if queryTag := r.Tag.Get("query"); queryTag != "" {
|
||
field = queryTag
|
||
}
|
||
if jsonTag := r.Tag.Get("json"); jsonTag != "" {
|
||
field = jsonTag
|
||
}
|
||
|
||
errorsValidate = append(errorsValidate, &models.RespErrorValidate{
|
||
Field: field,
|
||
Tag: err.Tag(),
|
||
Value: err.Param(),
|
||
})
|
||
}
|
||
}
|
||
|
||
return errorsValidate
|
||
}
|