moved to struct validation;
This commit is contained in:
@@ -1,35 +1,48 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"GoMembership/pkg/errors"
|
||||
"GoMembership/pkg/logger"
|
||||
"net/http"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-playground/validator/v10"
|
||||
)
|
||||
|
||||
type ResponseHandler struct {
|
||||
Writer http.ResponseWriter
|
||||
func RespondWithError(c *gin.Context, err error, context string, code int, field string, key string) {
|
||||
logger.Error.Printf("Sending %v Error Response(Field: %v Key: %v) %v: %v", code, field, key, context, err.Error())
|
||||
c.JSON(code, gin.H{"errors": []gin.H{{
|
||||
"field": field,
|
||||
"key": key,
|
||||
}}})
|
||||
}
|
||||
|
||||
type Response struct {
|
||||
Status string `json:"status"`
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
func NewResponseHandler(w http.ResponseWriter) *ResponseHandler {
|
||||
return &ResponseHandler{Writer: w}
|
||||
}
|
||||
|
||||
func (rh *ResponseHandler) RespondWithError(code int, message string) {
|
||||
response := Response{
|
||||
Status: "error",
|
||||
Message: message,
|
||||
func HandleValidationError(c *gin.Context, err error) {
|
||||
var validationErrors []gin.H
|
||||
logger.Error.Printf("Sending validation error response Error %v", err.Error())
|
||||
if ve, ok := err.(validator.ValidationErrors); ok {
|
||||
for _, e := range ve {
|
||||
validationErrors = append(validationErrors, gin.H{
|
||||
"field": e.Field(),
|
||||
"key": "server.validation." + e.Tag(),
|
||||
})
|
||||
}
|
||||
} else {
|
||||
validationErrors = append(validationErrors, gin.H{
|
||||
"field": "general",
|
||||
"key": "server.error.invalid_json",
|
||||
})
|
||||
}
|
||||
rh.Writer.Header().Set("Content-Type", "application/json")
|
||||
rh.Writer.WriteHeader(code)
|
||||
json.NewEncoder(rh.Writer).Encode(response)
|
||||
c.JSON(http.StatusBadRequest, gin.H{"errors": validationErrors})
|
||||
}
|
||||
|
||||
func (rh *ResponseHandler) RespondWithJSON(code int, payload interface{}) {
|
||||
rh.Writer.Header().Set("Content-Type", "application/json")
|
||||
rh.Writer.WriteHeader(code)
|
||||
json.NewEncoder(rh.Writer).Encode(payload)
|
||||
func HandleUpdateError(c *gin.Context, err error) {
|
||||
switch err {
|
||||
case errors.ErrUserNotFound:
|
||||
RespondWithError(c, err, "Error while updating user", http.StatusNotFound, "user", "server.validation.user_not_found")
|
||||
case errors.ErrInvalidUserData:
|
||||
RespondWithError(c, err, "Error while updating user", http.StatusBadRequest, "user", "server.validation.invalid_user_data")
|
||||
default:
|
||||
RespondWithError(c, err, "Error while updating user", http.StatusInternalServerError, "user", "server.error.internal_server_error")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user