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)
}