mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 13:31:56 +00:00
fix(BE): kandang capacity and fix err response
This commit is contained in:
@@ -3,6 +3,8 @@ package validation
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strings"
|
||||
|
||||
"github.com/go-playground/validator/v10"
|
||||
)
|
||||
@@ -21,34 +23,41 @@ var customMessages = map[string]string{
|
||||
"alphanum": "Field %s must contain only alphanumeric characters",
|
||||
"oneof": "Invalid value for field %s",
|
||||
"password": "Field %s must be at least 8 characters, contain uppercase, lowercase, number, and special character",
|
||||
"gt": "Invalid %s, must be greater than %s",
|
||||
}
|
||||
|
||||
func CustomErrorMessages(err error) map[string]string {
|
||||
func CustomErrorMessages(err error) (string, map[string]string) {
|
||||
var validationErrors validator.ValidationErrors
|
||||
if errors.As(err, &validationErrors) {
|
||||
return generateErrorMessages(validationErrors)
|
||||
}
|
||||
return nil
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func generateErrorMessages(validationErrors validator.ValidationErrors) map[string]string {
|
||||
func generateErrorMessages(validationErrors validator.ValidationErrors) (string, map[string]string) {
|
||||
errorsMap := make(map[string]string)
|
||||
for _, err := range validationErrors {
|
||||
var firstMessage string
|
||||
for i, err := range validationErrors {
|
||||
fieldName := err.StructNamespace()
|
||||
tag := err.Tag()
|
||||
|
||||
customMessage := customMessages[tag]
|
||||
var msg string
|
||||
if customMessage != "" {
|
||||
errorsMap[fieldName] = formatErrorMessage(customMessage, err, tag)
|
||||
msg = formatErrorMessage(customMessage, err, tag)
|
||||
} else {
|
||||
errorsMap[fieldName] = defaultErrorMessage(err)
|
||||
msg = defaultErrorMessage(err)
|
||||
}
|
||||
errorsMap[fieldName] = msg
|
||||
if i == 0 {
|
||||
firstMessage = msg
|
||||
}
|
||||
}
|
||||
return errorsMap
|
||||
return firstMessage, errorsMap
|
||||
}
|
||||
|
||||
func formatErrorMessage(customMessage string, err validator.FieldError, tag string) string {
|
||||
if tag == "min" || tag == "max" || tag == "len" {
|
||||
if tag == "min" || tag == "max" || tag == "len" || tag == "gt" {
|
||||
return fmt.Sprintf(customMessage, err.Field(), err.Param())
|
||||
}
|
||||
return fmt.Sprintf(customMessage, err.Field())
|
||||
@@ -61,6 +70,16 @@ func defaultErrorMessage(err validator.FieldError) string {
|
||||
func Validator() *validator.Validate {
|
||||
validate := validator.New()
|
||||
|
||||
validate.RegisterTagNameFunc(func(fld reflect.StructField) string {
|
||||
if jsonTag := getTagName(fld, "json"); jsonTag != "" {
|
||||
return jsonTag
|
||||
}
|
||||
if queryTag := getTagName(fld, "query"); queryTag != "" {
|
||||
return queryTag
|
||||
}
|
||||
return fld.Name
|
||||
})
|
||||
|
||||
if err := validate.RegisterValidation("password", Password); err != nil {
|
||||
return nil
|
||||
}
|
||||
@@ -72,3 +91,16 @@ func Validator() *validator.Validate {
|
||||
}
|
||||
return validate
|
||||
}
|
||||
|
||||
func getTagName(fld reflect.StructField, tag string) string {
|
||||
value, ok := fld.Tag.Lookup(tag)
|
||||
if !ok || value == "-" {
|
||||
return ""
|
||||
}
|
||||
|
||||
name := strings.Split(value, ",")[0]
|
||||
if name == "" || name == "-" {
|
||||
return ""
|
||||
}
|
||||
return name
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user