Implements API validator and uses it in user endpoint
This commit is contained in:
parent
932edb8da7
commit
cfe335ea39
3 changed files with 45 additions and 3 deletions
36
internal/api/validator.go
Normal file
36
internal/api/validator.go
Normal 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, ". "))
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue