50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
package server
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"gorm.io/gorm"
|
|
"leafdev.top/Leaf/leaf-library-3/internal/base/logger"
|
|
"leafdev.top/Leaf/leaf-library-3/internal/pkg/validator"
|
|
"leafdev.top/Leaf/leaf-library-3/internal/types/dto"
|
|
"leafdev.top/Leaf/leaf-library-3/internal/types/errs"
|
|
)
|
|
|
|
func errorConverter(logger *logger.Logger, ctx *fiber.Ctx, err error) error {
|
|
status := http.StatusInternalServerError
|
|
|
|
if err == nil {
|
|
return dto.Ctx(ctx).Error(errs.ErrInternalServerError).Status(status).Send()
|
|
}
|
|
|
|
var errorMsg dto.IError
|
|
|
|
switch {
|
|
// 404
|
|
//case errors.Is(err, fiber.ErrNotFound):
|
|
// status = http.StatusNotFound
|
|
// errorMsg = errs.RouteNotFound
|
|
|
|
case errors.Is(err, fiber.ErrUnprocessableEntity):
|
|
status = http.StatusUnprocessableEntity
|
|
errorMsg = err
|
|
|
|
case errors.Is(err, errs.ErrPermissionDenied):
|
|
status = http.StatusForbidden
|
|
|
|
case errors.Is(err, validator.ErrValidationFailed):
|
|
status = http.StatusBadRequest
|
|
|
|
case errors.Is(err, gorm.ErrRecordNotFound):
|
|
errorMsg = errs.ErrNotFound
|
|
|
|
default:
|
|
logger.Sugar.Errorf("fiber error: %s", err)
|
|
errorMsg = errs.UnknownError
|
|
}
|
|
|
|
return dto.Ctx(ctx).Status(status).Error(errorMsg).Send()
|
|
}
|