diff --git a/src/notificationdb.js b/src/notificationdb.js index 59afb8a1d..b352cde3d 100644 --- a/src/notificationdb.js +++ b/src/notificationdb.js @@ -103,21 +103,28 @@ function del(id, callback) { }); } -function listByUserIdPaged(userId, page, perPage, callback) { +function listByUserIdPaged(userId, options, page, perPage, callback) { assert.strictEqual(typeof userId, 'string'); + assert.strictEqual(typeof options, 'object'); + assert(options.acknowledged === null || typeof options.acknowledged === 'boolean'); assert.strictEqual(typeof page, 'number'); assert.strictEqual(typeof perPage, 'number'); assert.strictEqual(typeof callback, 'function'); - var data = [ userId ]; - var query = 'SELECT ' + NOTIFICATION_FIELDS + ' FROM notifications WHERE userId=?'; + let args = [ userId ]; + let query = `SELECT ${NOTIFICATION_FIELDS} FROM notifications WHERE userId=?`; + + if ('acknowledged' in options) { + query += ' AND acknowledged=?'; + args.push(options.acknowledged); + } query += ' ORDER BY creationTime DESC LIMIT ?,?'; - data.push((page-1)*perPage); - data.push(perPage); + args.push((page-1)*perPage); + args.push(perPage); - database.query(query, data, function (error, results) { + database.query(query, args, function (error, results) { if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); results.forEach(postProcess); diff --git a/src/notifications.js b/src/notifications.js index 06f854a95..cd832348c 100644 --- a/src/notifications.js +++ b/src/notifications.js @@ -3,7 +3,7 @@ exports = module.exports = { get, ack, - getAllPaged, + listByUserIdPaged, onEvent, @@ -80,19 +80,18 @@ function ack(id, callback) { } // if acknowledged === null we return all, otherwise yes or no based on acknowledged as a boolean -function getAllPaged(userId, acknowledged, page, perPage, callback) { +function listByUserIdPaged(userId, options, page, perPage, callback) { assert.strictEqual(typeof userId, 'string'); - assert(acknowledged === null || typeof acknowledged === 'boolean'); + assert.strictEqual(typeof options, 'object'); + assert(options.acknowledged === null || typeof options.acknowledged === 'boolean'); assert.strictEqual(typeof page, 'number'); assert.strictEqual(typeof perPage, 'number'); assert.strictEqual(typeof callback, 'function'); - notificationdb.listByUserIdPaged(userId, page, perPage, function (error, result) { + notificationdb.listByUserIdPaged(userId, options, page, perPage, function (error, result) { if (error) return callback(error); - if (acknowledged === null) return callback(null, result); - - callback(null, result.filter(function (r) { return r.acknowledged === acknowledged; })); + callback(null, result); }); } diff --git a/src/routes/notifications.js b/src/routes/notifications.js index 5b4185b33..80028e367 100644 --- a/src/routes/notifications.js +++ b/src/routes/notifications.js @@ -1,10 +1,10 @@ 'use strict'; exports = module.exports = { - verifyOwnership: verifyOwnership, - get: get, - list: list, - ack: ack + verifyOwnership, + get, + list, + ack }; let assert = require('assert'), @@ -34,17 +34,17 @@ function get(req, res, next) { } function list(req, res, next) { - var page = typeof req.query.page !== 'undefined' ? parseInt(req.query.page) : 1; + const page = typeof req.query.page !== 'undefined' ? parseInt(req.query.page) : 1; if (!page || page < 0) return next(new HttpError(400, 'page query param has to be a postive number')); - var perPage = typeof req.query.per_page !== 'undefined'? parseInt(req.query.per_page) : 25; + const perPage = typeof req.query.per_page !== 'undefined'? parseInt(req.query.per_page) : 25; if (!perPage || perPage < 0) return next(new HttpError(400, 'per_page query param has to be a postive number')); - var acknowledged = null; if (req.query.acknowledged && !(req.query.acknowledged === 'true' || req.query.acknowledged === 'false')) return next(new HttpError(400, 'acknowledged must be a true or false')); - else if (req.query.acknowledged) acknowledged = req.query.acknowledged === 'true' ? true : false; - notifications.getAllPaged(req.user.id, acknowledged, page, perPage, function (error, result) { + const acknowledged = req.query.acknowledged ? req.query.acknowledged === 'true' : null; + + notifications.listByUserIdPaged(req.user.id, { acknowledged }, page, perPage, function (error, result) { if (error) return next(BoxError.toHttpError(error)); next(new HttpSuccess(200, { notifications: result }));