async _getAlertsCount()

in source/services/api/event/lib/event.js [582:650]


  async _getAlertsCount(userId, alertLevel, lastevalkey) {
    // Gets whole alerts
    let _keyConditionExpression = 'userId = :uid';
    let _expressionAttributeValues = {
      ':uid': userId,
      ':false': false,
    };
    let _expressionAttributeNames = {
      '#ack': 'ack',
      '#type': 'type',
    };
    let _filterExpression = '#ack = :false';

    // FilterExpression for alert level
    // If user chooses nothing for the alert level, return 0.
    if (alertLevel.length > 0) {
      let _filterAlert = '';
      for (let i = 0; i < alertLevel.length; i++) {
        let alert = alertLevel[i];
        _expressionAttributeValues[`:${alert}`] = alert;

        if (i === 0) {
          _filterAlert = `#type = :${alert}`;
        } else {
          _filterAlert = `${_filterAlert} or #type = :${alert}`
        }
      }
      _filterExpression = `${_filterExpression} and (${_filterAlert})`;
    } else {
      return Promise.resolve(0);
    }

    let params = this.commonUtils.generateDynamoDBQueryParams(
      process.env.EVENTS_TBL,
      _keyConditionExpression,
      _expressionAttributeValues,
      _expressionAttributeNames,
      _filterExpression,
      'userId-timestamp-index',
      false,
      lastevalkey,
      'id',
      100
    );

    let docClient = new AWS.DynamoDB.DocumentClient(this.dynamoConfig);
    try {
      let result = await docClient.query(params).promise();
      let count = result.Count;

      if (result.LastEvaluatedKey) {
        count += await this._getAlertsCount(userId, alertLevel, result.LastEvaluatedKey);
      }

      return Promise.resolve(count);
    } catch (err) {
      Logger.error(Logger.levels.INFO, err);
      Logger.error(
        Logger.levels.INFO,
        `Error occurred while attempting to get the count of event alerts.`
      );

      return Promise.reject({
        code: 500,
        error: 'AlertRetrieveFailure',
        message: `Error occurred while attempting to get the count of event alerts.`,
      });
    }
  }