go-quasar-partial-ssr/backend/internal/http/controllers/validation.go

29 lines
854 B
Go

package controllers
import (
"fmt"
"strings"
"github.com/go-playground/validator/v10"
"github.com/gofiber/fiber/v3"
)
var validate = validator.New(validator.WithRequiredStructEnabled())
// validateStruct runs tag-based validation and returns a Fiber 400 error on failure.
func validateStruct(payload any) error {
if err := validate.Struct(payload); err != nil {
if _, ok := err.(*validator.InvalidValidationError); ok {
return fiber.NewError(fiber.StatusBadRequest, "invalid payload")
}
if verrs, ok := err.(validator.ValidationErrors); ok && len(verrs) > 0 {
fe := verrs[0]
field := strings.ToLower(fe.Field())
msg := fmt.Sprintf("%s validation failed (%s)", field, fe.ActualTag())
return fiber.NewError(fiber.StatusBadRequest, msg)
}
return fiber.NewError(fiber.StatusBadRequest, "validation failed")
}
return nil
}