Skip to content

Commit

Permalink
Merge pull request #3869 from nickmango/bug/get-user-paginate
Browse files Browse the repository at this point in the history
Feature/Gitlab User query
  • Loading branch information
nickmango authored Mar 21, 2023
2 parents db5c6a5 + c33e5f4 commit 21017e0
Showing 1 changed file with 34 additions and 6 deletions.
40 changes: 34 additions & 6 deletions cla-backend-go/users/repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -701,17 +701,45 @@ func (repo repository) GetUsersByEmail(userEmail string) ([]*models.User, error)
TableName: aws.String(repo.tableName),
}

// Make the DynamoDB Query API call
result, err := repo.dynamoDBClient.Scan(scanInput)
if err != nil {
log.WithFields(f).Warnf("Error retrieving user by user email: %s, error: %+v", userEmail, err)
return nil, err
lastEvaluatedKey := ""
resultItems := []map[string]*dynamodb.AttributeValue{}

for ok := true; ok; ok = lastEvaluatedKey != "" {
var result *dynamodb.ScanOutput
// Make the DynamoDB Query API call
log.WithFields(f).Debugf("lastEvaluatedKey: %s", lastEvaluatedKey)
if lastEvaluatedKey != "" {
scanInput.ExclusiveStartKey = map[string]*dynamodb.AttributeValue{
"user_id": {
S: aws.String(lastEvaluatedKey),
},
}
result, err = repo.dynamoDBClient.Scan(scanInput)
if err != nil {
log.WithFields(f).Warnf("Error retrieving user by user email: %s, error: %+v", userEmail, err)
return nil, err
}
} else {
result, err = repo.dynamoDBClient.Scan(scanInput)
if err != nil {
log.WithFields(f).Warnf("Error retrieving user by user email: %s, error: %+v", userEmail, err)
return nil, err
}
}
resultItems = append(resultItems, result.Items...)

// If we have another page of results...
if result.LastEvaluatedKey["user_id"] != nil {
lastEvaluatedKey = *result.LastEvaluatedKey["user_id"].S
} else {
lastEvaluatedKey = ""
}
}

// The database user model
var dbUserModels []DBUser

err = dynamodbattribute.UnmarshalListOfMaps(result.Items, &dbUserModels)
err = dynamodbattribute.UnmarshalListOfMaps(resultItems, &dbUserModels)
if err != nil {
log.WithFields(f).Warnf("error unmarshalling user record from database for user email: %s, error: %+v", userEmail, err)
return nil, err
Expand Down

0 comments on commit 21017e0

Please sign in to comment.