in store/dynamodb.go [38:73]
func (d *DynamoDBStore) All(ctx context.Context, next *string) (types.ProductRange, error) {
productRange := types.ProductRange{
Products: []types.Product{},
}
input := &dynamodb.ScanInput{
TableName: &d.tableName,
Limit: aws.Int32(20),
}
if next != nil {
input.ExclusiveStartKey = map[string]ddbtypes.AttributeValue{
"id": &ddbtypes.AttributeValueMemberS{Value: *next},
}
}
result, err := d.client.Scan(ctx, input)
if err != nil {
return productRange, fmt.Errorf("failed to get items from DynamoDB: %w", err)
}
err = attributevalue.UnmarshalListOfMaps(result.Items, &productRange.Products)
if err != nil {
return productRange, fmt.Errorf("failed to unmarshal data from DynamoDB: %w", err)
}
if len(result.LastEvaluatedKey) > 0 {
if key, ok := result.LastEvaluatedKey["id"]; ok {
nextKey := key.(*ddbtypes.AttributeValueMemberS).Value
productRange.Next = &nextKey
}
}
return productRange, nil
}