Implements API validator and uses it in user endpoint

This commit is contained in:
Dennis Schoepf 2024-04-30 20:03:37 +02:00
parent 932edb8da7
commit cfe335ea39
3 changed files with 45 additions and 3 deletions

36
internal/api/validator.go Normal file
View file

@ -0,0 +1,36 @@
package api
import (
"fmt"
"freed/internal/model"
"strings"
"github.com/go-playground/validator/v10"
"github.com/gofiber/fiber/v2"
)
type ModelConstraint interface {
*model.User // | add other models here
}
type ValidationError struct {
FailedField string
Tag string
Value string
}
func ValidateModel[T ModelConstraint](s T) *fiber.Error {
var errorMessages []string
validate := validator.New()
err := validate.Struct(s)
if err != nil {
for _, err := range err.(validator.ValidationErrors) {
err := fmt.Sprintf("Field %s is invalid, reason: %s", err.StructNamespace(), err.Tag())
errorMessages = append(errorMessages, err)
}
}
return fiber.NewError(fiber.StatusBadRequest, strings.Join(errorMessages, ". "))
}