leaf-library-3/internal/base/server/error.go
2024-12-06 23:38:22 +08:00

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()
}