Skip to content
Snippets Groups Projects
Select Git revision
  • 1139ae37e8918ac1d9396b990af5ee0ae1319277
  • main default protected
  • trading_hours
  • refactor_trading_hours
  • audit_cleaning_cater_for_non_struct_fields
  • remove-info-logs
  • sl-refactor
  • 18-use-scan-for-param-values
  • 17-order-search-results
  • 4-simplify-framework-2
  • 1-http-error
  • v1.297.0
  • v1.296.0
  • v1.295.0
  • v1.294.0
  • v1.293.0
  • v1.292.0
  • v1.291.0
  • v1.290.0
  • v1.289.0
  • v1.288.0
  • v1.287.0
  • v1.286.0
  • v1.285.0
  • v1.284.0
  • v1.283.0
  • v1.282.0
  • v1.281.0
  • v1.280.0
  • v1.279.0
  • v1.278.0
31 results

api_responses.go

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