diff options
| author | Jules Laplace <jules@okfoc.us> | 2016-10-06 13:20:23 -0400 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2016-10-06 13:20:23 -0400 |
| commit | f8bbee2634329595711d33ae82923f23a3ddb7fc (patch) | |
| tree | 50aedcdc2006eda324b59f8eaeb831fc13fd6eac /examples/lib/okpush/db.js | |
| parent | ef2cfac2c055cdfa3958374c68a8d0cfe4e4f046 (diff) | |
store notification last update in db
Diffstat (limited to 'examples/lib/okpush/db.js')
| -rw-r--r-- | examples/lib/okpush/db.js | 69 |
1 files changed, 62 insertions, 7 deletions
diff --git a/examples/lib/okpush/db.js b/examples/lib/okpush/db.js index 67d1ba8..7727825 100644 --- a/examples/lib/okpush/db.js +++ b/examples/lib/okpush/db.js @@ -1,4 +1,5 @@ var mongoose = require('mongoose') +var findOrCreate = require('mongoose-findorcreate') var _ = require('lodash') var db, PushToken @@ -19,19 +20,35 @@ function init (config) { } }) + var notificationSchema = new db.Schema({ + key: { + type: 'String', + required: true, + lowercase: true, + }, + last_fired: { + type: 'Date', + required: true, + } + }) + notificationSchema.plugin(findOrCreate); + PushToken = db.model('PushToken', pushTokenSchema) + Notification = db.model('Notification', notificationSchema) } function errorHandler (error) { console.error('ERROR: ' + error) } -function add (deviceType, token) { + +/* devices / tokens */ + +function addDevice (deviceType, token) { var pushItem = new PushToken({ type: deviceType, token: token }) pushItem.save() } -function getAll (cb) { - var wcb = wrap(cb) - PushToken.find(wcb) +function getAllDevices (cb) { + PushToken.find( wrapDeviceCallback(cb) ) } function removeDevice () { PushToken.remove({token: token}, function (err) { @@ -43,7 +60,32 @@ function removeDevices (tokens) { if (err) console.log(err) }) } -function wrap (cb) { + +/* notifications */ + +function updateNotification (key, cb) { + var now = new Date + Notification.findOrCreate({key: key}, {last_fired: now}, function(err, note, created){ + if (err) { + console.error("Error finding/creating notification", err) + cb(err, false) + return + } + else if (! created) { + note.last_fired = now + note.save() + cb(null, note) + } + cb(null, note) + }) +} +function getAllNotifications (cb) { + Notification.find( wrapNotificationCallback(cb) ) +} + +/* wrap functions for some reason */ + +function wrapDeviceCallback (cb) { return function (err, items) { if (err) return cb(err, null) @@ -54,10 +96,23 @@ function wrap (cb) { return callback(null, items) } } +function wrapNotificationCallback (cb) { + return function (err, items) { + if (err) return cb(err, null) + + var items = _.map(items, function (item) { + return _.pick(item, ['key', 'last_fired']) + }) + + return callback(null, items) + } +} module.exports = { init: init, - add: add, - getAll: getAll, + addDevice: addDevice, + getAllDevices: getAllDevices, removeDevice: removeDevice, removeDevices: removeDevices, + updateNotification: updateNotification, + getAllNotifications: getAllNotifications, }
\ No newline at end of file |
