summaryrefslogtreecommitdiff
path: root/examples/lib/okpush/db.js
diff options
context:
space:
mode:
Diffstat (limited to 'examples/lib/okpush/db.js')
-rw-r--r--examples/lib/okpush/db.js69
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