diff --git a/lib/notifier/queries.js b/lib/notifier/queries.js index e3ffe0eb..bca51fa7 100644 --- a/lib/notifier/queries.js +++ b/lib/notifier/queries.js @@ -15,70 +15,29 @@ error - notifications related to errors */ const addNotification = (type, message, detail) => { - const sql = `INSERT INTO notifications (id, type, message, detail) VALUES ($1, $2, $3, $4)` - return db.oneOrNone(sql, [uuidv4(), type, message, detail]) + const sql = `INSERT INTO notifications (id, type, message, detail) values ($1, $2, $3, $4)` + return db.oneOrNone(sql, [uuidv4(), type, message, detail]) } const getAllValidNotifications = (type) => { - const sql = `SELECT * FROM notifications WHERE type = $1 AND valid = 't'` - return db.any(sql, [type]) + const sql = `SELECT * FROM notifications WHERE type = $1 AND valid = 't'` + return db.any(sql, [type]) } const invalidateNotification = (detail, type) => { - detail = _.omitBy(_.isEmpty, detail) - const sql = `UPDATE notifications SET valid = 'f', read = 't', modified = CURRENT_TIMESTAMP WHERE valid = 't' AND type = $1 AND detail::jsonb @> $2::jsonb` - return db.none(sql, [type, detail]) -} - -const batchInvalidate = (ids) => { - const formattedIds = _.map(pgp.as.text, ids).join(',') - const sql = `UPDATE notifications SET valid = 'f', read = 't', modified = CURRENT_TIMESTAMP WHERE id IN ($1^)` - return db.none(sql, [formattedIds]) -} - -const clearBlacklistNotification = (cryptoCode, cryptoAddress) => { - const sql = `UPDATE notifications SET valid = 'f', read = 't', modified = CURRENT_TIMESTAMP WHERE type = 'compliance' AND detail->>'cryptoCode' = $1 AND detail->>'cryptoAddress' = $2 AND (detail->>'code' = 'BLOCKED' OR detail->>'code' = 'REUSED')` - return db.none(sql, [cryptoCode, cryptoAddress]) -} - -const getValidNotifications = (type, detail) => { - const sql = `SELECT * FROM notifications WHERE type = $1 AND valid = 't' AND detail @> $2` - return db.any(sql, [type, detail]) -} - -const getNotifications = () => { - const sql = `SELECT * FROM notifications ORDER BY created DESC` - return db.any(sql) -} - -const markAsRead = (id) => { - const sql = `UPDATE notifications SET read = 't', modified = CURRENT_TIMESTAMP WHERE id = $1` - return db.none(sql, [id]) -} - -const markAllAsRead = () => { - const sql = `UPDATE notifications SET read = 't'` - return db.none(sql) -} - -const hasUnreadNotifications = () => { - const sql = `SELECT EXISTS (SELECT 1 FROM notifications WHERE read = 'f' LIMIT 1)` - return db.oneOrNone(sql).then(res => res.exists) -} - -const addComplianceNotification = (deviceId, detail, message) => { - const sql = `INSERT INTO notifications (id, type, detail, device_id, message, created) values ($1, 'compliance', $2, $3, $4, CURRENT_TIMESTAMP)` - return db.oneOrNone(sql, [uuidv4(), detail, deviceId, message]) + detail = _.omitBy(_.isEmpty, detail) + const sql = `UPDATE notifications SET valid = 'f', read = 't' WHERE valid = 't' AND type = $1 AND detail::jsonb @> $2::jsonb` + return db.none(sql, [type, detail]) } const batchInvalidate = (ids) => { const formattedIds = _.map(pgp.as.text, ids).join(',') - const sql = `UPDATE notifications SET valid = 'f', read = 't', modified = CURRENT_TIMESTAMP WHERE id IN ($1^)` + const sql = `UPDATE notifications SET valid = 'f', read = 't' WHERE id IN ($1^)` return db.none(sql, [formattedIds]) } const clearBlacklistNotification = (cryptoCode, cryptoAddress) => { - const sql = `UPDATE notifications SET valid = 'f', read = 't', modified = CURRENT_TIMESTAMP WHERE type = 'compliance' AND detail->>'cryptoCode' = $1 AND detail->>'cryptoAddress' = $2 AND (detail->>'code' = 'BLOCKED' OR detail->>'code' = 'REUSED')` + const sql = `UPDATE notifications SET valid = 'f', read = 't' WHERE type = 'compliance' AND detail->>'cryptoCode' = $1 AND detail->>'cryptoAddress' = $2 AND (detail->>'code' = 'BLOCKED' OR detail->>'code' = 'REUSED')` return db.none(sql, [cryptoCode, cryptoAddress]) } @@ -88,27 +47,42 @@ const getValidNotifications = (type, detail) => { } const getNotificationsGql = () => { - const sql = `(SELECT * from notifications WHERE read = 'f' AND valid = 't' ORDER BY created DESC) - UNION ALL (SELECT * from notifications WHERE read = 't' OR valid = 'f' ORDER BY modified DESC LIMIT 50) - ` + const sql = `SELECT * FROM notifications ORDER BY created DESC` return db.any(sql) } const markAsReadGql = (id) => { - const sql = `UPDATE notifications SET read = 't', modified = CURRENT_TIMESTAMP WHERE id = $1` + const sql = `UPDATE notifications SET read = 't' WHERE id = $1` return db.none(sql, [id]) } -module.exports = { - machineEvents: dbm.machineEvents, - addNotification, - getAllValidNotifications, - invalidateNotification, - batchInvalidate, - clearBlacklistNotification, - getValidNotifications, - getNotifications, - markAsRead, - markAllAsRead, - hasUnreadNotifications +const markAllAsReadGql = () => { + const sql = `UPDATE notifications SET read = 't'` + return db.none(sql) +} + +const hasUnreadNotificationsGql = () => { + const sql = `SELECT EXISTS (SELECT 1 FROM notifications WHERE read = 'f' LIMIT 1)` + return db.oneOrNone(sql).then(res => res.exists) +} + +const getAlertsGql = () => { + const types = ['fiatBalance', 'cryptoBalance', 'error'] + const sql = `SELECT * FROM notifications WHERE valid = 't' AND type IN ($1:list) ORDER BY created DESC` + return db.any(sql, [types]) +} + +module.exports = { + machineEvents: dbm.machineEvents, + addNotification, + getAllValidNotifications, + invalidateNotification, + batchInvalidate, + clearBlacklistNotification, + getValidNotifications, + getNotificationsGql, + markAsReadGql, + markAllAsReadGql, + hasUnreadNotificationsGql, + getAlertsGql } diff --git a/new-lamassu-admin/public/index.html b/new-lamassu-admin/public/index.html index 867e9cce..9fbcae31 100644 --- a/new-lamassu-admin/public/index.html +++ b/new-lamassu-admin/public/index.html @@ -27,6 +27,7 @@
+