async _getRegistrationPage()

in source/services/api/registration/lib/registration.js [72:120]


  async _getRegistrationPage(userId, lastevalkey) {
    let registrations = [];
    let _keyConditionExpression = 'userId = :uid';
    let _expressionAttributeValues = {
      ':uid': userId,
    };

    const params = {
      TableName: process.env.REGISTRATION_TBL,
      IndexName: 'userId-deviceName-index',
      KeyConditionExpression: _keyConditionExpression,
      ExpressionAttributeValues: _expressionAttributeValues,
      Limit: 100,
    };

    if (lastevalkey) {
      params.ExclusiveStartKey = lastevalkey;
    }

    let docClient = new AWS.DynamoDB.DocumentClient(this.dynamoConfig);
    try {
      let result = await docClient.query(params).promise();
      registrations = [...result.Items];

      // If there is more data, load more data and append them to registrations
      if (result.LastEvaluatedKey) {
        let moreResult = await this._getRegistrationPage(userId, result.LastEvaluatedKey);
        registrations = [...registrations, ...moreResult];
      }

      return Promise.resolve(registrations);
    } catch (err) {
      if (err.message) {
        return Promise.reject(err);
      }

      Logger.error(Logger.levels.INFO, err);
      Logger.error(
        Logger.levels.INFO,
        `[RegistrationQueryFailure] Error occurred while attempting to retrieve registrations from registration table with lastEvaluatedKey ${lastevalkey}.`,
      );

      return Promise.reject({
        code: 500,
        error: 'RegistrationQueryFailure',
        message: `Error occurred while attempting to retrieve registrations.`,
      });
    }
  }