Skip to content
Snippets Groups Projects
Select Git revision
  • d81b543fb702c694ab535f2ef10099b5f4f42bbc
  • 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

handler.go

Blame
  • debug.go 2.55 KiB
    package handler_utils
    
    import (
    	"bytes"
    	"context"
    	"encoding/json"
    	"fmt"
    	"github.com/aws/aws-lambda-go/events"
    	"github.com/aws/aws-lambda-go/lambda"
    	"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/utils"
    	"io"
    	"net/http"
    	"os"
    	"strings"
    )
    
    // ========================================================================
    // HTTP functions
    // ========================================================================
    
    func ServeHTTPFunctions(ctx context.Context, lambdaHandler lambda.Handler, w http.ResponseWriter, req *http.Request) {
    
    	// Read body
    	buf := new(bytes.Buffer)
    	_, err := buf.ReadFrom(req.Body)
    	if err != nil {
    		fmt.Println(err)
    		os.Exit(1)
    	}
    	req.Body.Close()
    	body := buf.String()
    
    	// Read Query
    	queryValues := req.URL.Query()
    	query := map[string]string{}
    	for key, values := range queryValues {
    		query[key] = values[0]
    	}
    
    	// Call lambda function
    	request := events.APIGatewayProxyRequest{
    		Resource:              req.URL.Path,
    		HTTPMethod:            req.Method,
    		QueryStringParameters: query,
    		Body:                  body,
    	}
    
    	jsonRequest, _ := json.Marshal(request)
    	responseBytes, err := lambdaHandler.Invoke(ctx, jsonRequest)
    	if err != nil {
    		panic(err)
    	}
    
    	// Parse response
    	response := map[string]any{}
    	err = json.Unmarshal(responseBytes, &response)
    	if err != nil {
    		return
    	}
    
    	w.Header().Set("Content-Type", "application/json")
    	w.WriteHeader(int(response["statusCode"].(float64)))
    	_, _ = io.WriteString(w, response["body"].(string))
    }
    
    // ========================================================================
    // SQS Functions
    // ========================================================================
    
    func ServeSQSFunctions(ctx context.Context, lambdaHandler lambda.Handler, w http.ResponseWriter, req *http.Request) {
    
    	// Read body
    	buf := new(bytes.Buffer)
    	_, err := buf.ReadFrom(req.Body)
    	if err != nil {
    		fmt.Println(err)
    		os.Exit(1)
    	}
    	req.Body.Close()
    	body := buf.String()
    
    	sqsType := req.URL.Path
    	sqsType = strings.ReplaceAll(sqsType, "/sqs/", "")
    
    	// Call lambda function
    	sqsRequest, _ := json.Marshal(events.SQSEvent{
    		Records: []events.SQSMessage{
    			{
    				Body: body,
    				MessageAttributes: map[string]events.SQSMessageAttribute{
    					"type": {
    						StringValue: utils.PointerValue(sqsType),
    					},
    				},
    			},
    		},
    	})
    
    	responseBytes, err := lambdaHandler.Invoke(ctx, sqsRequest)
    	if err != nil {
    		panic(err)
    	}
    
    	// Parse response
    	response := map[string]any{}
    	err = json.Unmarshal(responseBytes, &response)
    	if err != nil {
    		_, _ = io.WriteString(w, err.Error())
    		return
    	}
    
    	_, _ = io.WriteString(w, "done")
    }