3 Commits

Author SHA1 Message Date
c4390742b3 error check: refactor code to remove warning 2026-03-18 15:18:27 +01:00
0efc3629b0 API: improve validation message greater/lower than
Add translation and return a better error for lower than
2026-03-18 15:11:29 +01:00
a77d57603f Allow to cancel a rating 2026-03-18 13:51:38 +01:00
5 changed files with 20 additions and 9 deletions

View File

@@ -39,6 +39,7 @@ function onTextAreaFocus() {
</div>
<VRating
half-increments
clearable
hover
:length="5"
size="x-large"

View File

@@ -3,6 +3,8 @@ AuthenticationSuccess = "Authentication was a success."
ValidationRequired = "This field is required."
ValidationTooShort = "This field is too short. It should be at least %s characters."
ValidationTooLong = "This field is too long. It should be under %s characters."
ValidationLowerThan = "This field should be lower than %s."
ValidationGreaterThan = "This field should be greater than %s."
ValidationPropertyFail = "Validation failed for '%s' property."
RegistrationDisabled = "Registration has been disabled on this instance."
UserAlreadyExists = "An user with this name already exists."

View File

@@ -3,6 +3,8 @@ AuthenticationSuccess = "Connexion réussie."
ValidationRequired = "Ce champ est requis."
ValidationTooShort = "Ce champ est trop court. Il devrait contenir au moins %s caractères."
ValidationTooLong = "Ce champ est trop long. Il ne devrait pas dépasser %s caractères."
ValidationLowerThan = "Ce champ devrait être inférieur à %s."
ValidationGreaterThan = "Ce champ devrait être supérieur à %s."
ValidationPropertyFail = "La validation a échoué pour la propriété '%s'."
RegistrationDisabled = "La création de nouveaux comptes a été désactivée sur cette instance."
UserAlreadyExists = "Un utilisateur avec le même nom existe déjà."

View File

@@ -41,15 +41,18 @@ func ValidateId(db *gorm.DB, id uint, value any) error {
}
func ReturnErrorsAsJsonResponse(ac *appcontext.AppContext, err error) {
var httpError HttpError
var ve validator.ValidationErrors
if errors.As(err, &ve) {
ve, isValidationErrors := errors.AsType[validator.ValidationErrors](err)
if isValidationErrors {
ac.C.JSON(http.StatusBadRequest, getValidationErrors(ac, &ve))
} else if errors.As(err, &httpError) {
ac.C.JSON(httpError.StatusCode, gin.H{"error": httpError.Err.Error()})
} else {
ac.C.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
httpError, isHttpError := errors.AsType[HttpError](err)
if isHttpError {
ac.C.JSON(httpError.StatusCode, gin.H{"error": httpError.Err.Error()})
return
}
ac.C.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
}
func (h HttpError) Error() string {
@@ -79,10 +82,12 @@ func computeValidationMessage(ac *appcontext.AppContext, fe *validator.FieldErro
return i18nresource.GetTranslatedMessage(ac, "ValidationRequired")
case "min":
return fmt.Sprintf(i18nresource.GetTranslatedMessage(ac, "ValidationTooShort"), (*fe).Param())
case "gte":
return fmt.Sprintf("Should be greater than %s", (*fe).Param())
case "max":
return fmt.Sprintf(i18nresource.GetTranslatedMessage(ac, "ValidationTooLong"), (*fe).Param())
case "lte":
return fmt.Sprintf(i18nresource.GetTranslatedMessage(ac, "ValidationLowerThan"), (*fe).Param())
case "gte":
return fmt.Sprintf(i18nresource.GetTranslatedMessage(ac, "ValidationGreaterThan"), (*fe).Param())
default:
return fmt.Sprintf(i18nresource.GetTranslatedMessage(ac, "ValidationPropertyFail"), tag)
}

View File

@@ -68,6 +68,7 @@ func PutUserBookHandler(ac appcontext.AppContext) {
err = validateRating(*userBookPut.Rating)
if err != nil {
myvalidator.ReturnErrorsAsJsonResponse(&ac, err)
return
}
updateRating(&userbook, &userBookPut)
}