Select Git revision
-
Gundo Sifhufhi authoredGundo Sifhufhi authored
api_responses.go 6.93 KiB
package api_responses
import (
"encoding/json"
"errors"
"fmt"
"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/map_utils"
"net/http"
"regexp"
"strconv"
"strings"
"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/utils"
"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/logs"
"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/responses"
"github.com/go-pg/pg/v10"
"github.com/aws/aws-lambda-go/events"
)
var ContentTypeJSONHeader = map[string]string{"Content-Type": "application/json"}
type errorMsg struct {
Message string `json:"message"`
Error string `json:"error,omitempty"`
}
// ServerError logs any error to os.Stderr and returns 500
// Internal Server Error response that the AWS API Gateway understands.
func ServerError(err error, msg string) (events.APIGatewayProxyResponse, error) {
return Error(err, msg, http.StatusInternalServerError)
}
func Error(err error, msg string, statusCode int) (events.APIGatewayProxyResponse, error) {
logs.ErrorWithFields(map[string]interface{}{
"type": "Server error",
"message": msg,
"code": statusCode,
}, err)
serverError := errorMsg{
Message: msg,
Error: err.Error(),
}
bodyBytes, err := json.Marshal(serverError)
if err != nil {
return events.APIGatewayProxyResponse{
StatusCode: statusCode,
Headers: map_utils.MergeMaps(utils.CorsHeaders(), responses.ContentTypeJSONHeader),
Body: "{ \"error\": \"" + http.StatusText(http.StatusInternalServerError) + "\"}",
}, nil
}
return events.APIGatewayProxyResponse{
StatusCode: statusCode,
Headers: map_utils.MergeMaps(utils.CorsHeaders(), responses.ContentTypeJSONHeader),
Body: string(bodyBytes),
}, errors.New(msg)
}
func DatabaseServerErrorNew(err error, msg string) error {
statusCode := StatusCodeFromSQLError(err)
errorString := err.Error()
if dbError := ErrorFromDBError(err); dbError != "" {
errorString = dbError
if strings.HasSuffix(msg, ".") {