package ddb import ( "context" "github.com/aws/amazon-genomics-cli/internal/pkg/cli/clierror/actionableerror" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue" exp "github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression" "github.com/aws/aws-sdk-go-v2/service/dynamodb" ) type WorkflowSummary struct { Name string } func (c *Client) ListWorkflows(ctx context.Context, project, user string) ([]WorkflowSummary, error) { pk := exp.Value(renderPartitionKey(project, user)) skPref := renderWorkflowPrefix() keyCondition := exp.Key(pkAttrName).Equal(pk).And(exp.Key(lsi1SkAttrName).BeginsWith(skPref)) expression, err := exp.NewBuilder().WithKeyCondition(keyCondition).Build() if err != nil { return nil, err } input := &dynamodb.QueryInput{ TableName: aws.String(TableName), KeyConditionExpression: expression.KeyCondition(), ExpressionAttributeNames: expression.Names(), ExpressionAttributeValues: expression.Values(), IndexName: aws.String(Lsi1Name), ScanIndexForward: aws.Bool(false), } p := dynamodb.NewQueryPaginator(c.svc, input) uniqueWorkflows := make(map[string]WorkflowSummary) for p.HasMorePages() { output, err := p.NextPage(ctx) if err != nil { return nil, actionableerror.FindSuggestionForError(err, actionableerror.AwsErrorMessageToSuggestedActionMap) } var records []WorkflowInstance err = attributevalue.UnmarshalListOfMaps(output.Items, &records) if err != nil { return nil, err } for _, record := range records { uniqueWorkflows[record.WorkflowName] = WorkflowSummary{Name: record.WorkflowName} } } var workflowSummaries []WorkflowSummary for _, summary := range uniqueWorkflows { workflowSummaries = append(workflowSummaries, summary) } return workflowSummaries, nil } func renderWorkflowPrefix() string { return "WORKFLOW#" }