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.`,
});
}
}