func()

in lambda/go/list-podcasts/main.go [26:58]


func (h *Handler) Handle(ctx context.Context, input events.APIGatewayV2HTTPRequest) (
	*events.APIGatewayV2HTTPResponse, error,
) {
	log.Printf("Request:\n%#v", input)

	filterExp, haveFilter, err := getFilterExpressionFromQueryString(input.QueryStringParameters)
	if err != nil {
		return nil, fmt.Errorf("failed to get filter expression from query, %w", err)
	}

	// Build the DynamoDB expression for retrieving only select fields from the item.
	builder := ddbexp.NewBuilder().
		WithProjection(workshop.ListEpisodesProjection())
	if haveFilter {
		builder.WithFilter(filterExp)
	}
	expr, err := builder.Build()
	if err != nil {
		return nil, fmt.Errorf("failed to build expression projection, %w", err)
	}

	// Call out to Amazon DynamoDB using Scan to get all the episodes in the table
	episodes, resp, err := h.getEpisodes(ctx, expr)
	if err != nil {
		return nil, fmt.Errorf("get episodes failed, %w", err)
	}
	if resp != nil {
		return resp, nil
	}

	// Respond back with the episode fields selected in the projection.
	return workshop.NewJSONResponse(200, nil, episodes)
}