blk/internal/controller/http/errors.go
2024-08-11 04:52:08 +03:00

46 lines
1.0 KiB
Go

package http
import (
"errors"
"net/http"
"github.com/optclblast/blk/internal/infrastructure/getblock"
)
var (
// ErrorBadQueryParams is thrown wheh query parameters are invalid
ErrorBadQueryParams = errors.New("bad query params")
)
// api error dto object
type apiError struct {
Code int `json:"code"`
Message string `json:"message"`
}
// buildApiError returns a new apiError instance built from error code and error message
func buildApiError(
code int,
message string,
) apiError {
return apiError{
Code: code,
Message: message,
}
}
// mapError maps internal errors to its API representation
func mapError(err error) apiError {
switch {
case errors.Is(err, ErrorBadQueryParams):
return buildApiError(http.StatusBadRequest, "Invalid Query Params")
case errors.Is(err, getblock.ErrorRateLimitExceeded):
return buildApiError(
http.StatusTooManyRequests,
"GetBlock API rate limit exceeded! Type again later",
)
default:
return buildApiError(http.StatusInternalServerError, "Internal Server Error")
}
}