Skip to content
Snippets Groups Projects
Select Git revision
1 result Searching

system.xml

Blame
  • 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, ".") {