versia-go/fiber_error_handler.go
2024-08-28 01:10:38 +02:00

33 lines
877 B
Go

package main
import (
"errors"
"git.devminer.xyz/devminer/unitel"
"github.com/gofiber/fiber/v2"
"github.com/rs/zerolog/log"
"github.com/versia-pub/versia-go/internal/api_schema"
)
func fiberErrorHandler(c *fiber.Ctx, err error) error {
var fiberErr *fiber.Error
var apiErr *api_schema.APIError
if errors.As(err, &fiberErr) {
apiErr = api_schema.NewAPIError(fiberErr.Code, fiberErr.Error())(nil)
} else if errors.As(err, &apiErr) {
log.Error().Err(apiErr).Msg("API error")
} else {
if hub := unitel.GetHubFromFiberContext(c); hub != nil {
hub.CaptureException(err)
}
log.Error().Err(err).Msg("Unhandled error")
apiErr = api_schema.NewAPIError(fiber.StatusInternalServerError, "Internal Server Error")(nil)
}
log.Error().Err(apiErr).Msg("Unhandled error")
return c.Status(apiErr.StatusCode).JSON(api_schema.NewFailedAPIResponse[any](apiErr))
}