leaf-library-3/internal/base/server/error.go
2024-12-10 18:22:14 +08:00

52 lines
1.2 KiB
Go

package server
import (
"errors"
"leafdev.top/Leaf/leaf-library-3/internal/pkg/response"
"net/http"
errs2 "leafdev.top/Leaf/leaf-library-3/internal/errs"
"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"
)
func errorConverter(logger *logger.Logger, ctx *fiber.Ctx, err error) error {
status := http.StatusInternalServerError
if err == nil {
return response.Ctx(ctx).Error(errs2.ErrInternalServerError).Status(status).Send()
}
var errorMsg response.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, errs2.ErrPermissionDenied):
status = http.StatusForbidden
case errors.Is(err, validator.ErrValidationFailed):
status = http.StatusBadRequest
case errors.Is(err, gorm.ErrRecordNotFound):
errorMsg = errs2.ErrNotFound
status = http.StatusNotFound
default:
logger.Sugar.Errorf("fiber error: %s", err)
errorMsg = errs2.UnknownError
}
return response.Ctx(ctx).Status(status).Error(errorMsg).Send()
}