50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package utils
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/go-playground/validator/v10"
|
|
)
|
|
|
|
var validate *validator.Validate
|
|
|
|
func init() {
|
|
validate = validator.New()
|
|
}
|
|
|
|
func Validate(data interface{}) error {
|
|
var errorMessages []string
|
|
|
|
err := validate.Struct(data)
|
|
if err != nil {
|
|
for _, err := range err.(validator.ValidationErrors) {
|
|
switch err.Tag() {
|
|
case "required":
|
|
errorMessages = append(errorMessages, err.Field()+" is required")
|
|
case "email":
|
|
errorMessages = append(errorMessages, err.Field()+" must be a valid email")
|
|
case "min":
|
|
errorMessages = append(errorMessages, err.Field()+" must be at least "+err.Param()+" characters long")
|
|
case "max":
|
|
errorMessages = append(errorMessages, err.Field()+" must be at most "+err.Param()+" characters long")
|
|
default:
|
|
errorMessages = append(errorMessages, err.Field()+" is not valid")
|
|
}
|
|
}
|
|
return errors.New("validation failed: " + joinMessages(errorMessages))
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func joinMessages(messages []string) string {
|
|
result := ""
|
|
for i, msg := range messages {
|
|
if i > 0 {
|
|
result += ", "
|
|
}
|
|
result += msg
|
|
}
|
|
return result
|
|
}
|