diff --git a/services/notifications/app.coffee b/services/notifications/app.coffee index 96f91d645e..e831015aba 100644 --- a/services/notifications/app.coffee +++ b/services/notifications/app.coffee @@ -3,7 +3,7 @@ logger = require 'logger-sharelatex' logger.initialize("notifications-sharelatex") express = require('express') app = express() -controller = require("./app/js/NotificationController") +controller = require("./app/js/NotificationsController") mongojs = require('mongojs') db = mongojs(Settings.mongo.url, ['notifications']) Path = require("path") @@ -21,8 +21,8 @@ app.configure ()-> app.use express.errorHandler() app.post '/user/:user_id', controller.addNotification -app.get '/user/:user_id', controller.getUsersNotifications -app.del '/user/:user_id/notification_id/:notification_id', controller.removeNotification +app.get '/user/:user_id', controller.getUserNotifications +app.del '/user/:user_id/notification/:notification_id', controller.removeNotification app.get '/status', (req, res)-> res.send('notifications sharelatex up') diff --git a/services/notifications/app/coffee/HealthCheckController.coffee b/services/notifications/app/coffee/HealthCheckController.coffee index 81fc1f55e6..a10ecafaa3 100644 --- a/services/notifications/app/coffee/HealthCheckController.coffee +++ b/services/notifications/app/coffee/HealthCheckController.coffee @@ -6,18 +6,20 @@ settings = require("settings-sharelatex") port = settings.internal.notifications.port logger = require "logger-sharelatex" +mongojs = require('mongojs') +Settings = require 'settings-sharelatex' +db = mongojs(Settings.mongo?.url, ['notifications']) module.exports = check : (callback)-> - project_id = ObjectId() user_id = ObjectId(settings.notifications.healthCheck.user_id) - notification_key = "smoke-test-notification" + notification_key = "smoke-test-notification-#{ObjectId()}" getOpts = (endPath)-> {url:"http://localhost:#{port}/user/#{user_id}#{endPath}", timeout:3000} logger.log user_id:user_id, opts:getOpts(), key:notification_key, user_id:user_id, "running health check" jobs = [ (cb)-> opts = getOpts("/") - opts.json = {key: notification_key, messageOpts:'', templateKey:'', user_id:user_id} + opts.json = {key: notification_key, messageOpts:'', templateKey:'f4g5', user_id:user_id} request.post(opts, cb) (cb)-> opts = getOpts("/") @@ -27,14 +29,18 @@ module.exports = return cb("status code not 200, its #{res.statusCode}") hasNotification = _.some body, (notification)-> - notification.key == notification_key and _.contains(notification.user_id, user_id.toString()) + notification.key == notification_key and notification.user_id == user_id.toString() if hasNotification - cb() + cb(null,body) else + logger.log body:body, "what is in the body" cb("notification not found in response") ] - async.series jobs, (err)-> + async.series jobs, (err, body)-> if err? callback(err) - opts = getOpts("/notification_id/#{notification_id}") - request.del opts, callback + else + notification_id = body[1][0]._id + opts = getOpts("/notification/#{notification_id}") + request.del opts, (err, res, body)-> + db.notifications.remove {_id:ObjectId(notification_id)}, callback diff --git a/services/notifications/app/coffee/Notifications.coffee b/services/notifications/app/coffee/Notifications.coffee index d89edbfe94..9d61452e81 100644 --- a/services/notifications/app/coffee/Notifications.coffee +++ b/services/notifications/app/coffee/Notifications.coffee @@ -2,25 +2,37 @@ Settings = require 'settings-sharelatex' logger = require('logger-sharelatex') mongojs = require('mongojs') db = mongojs(Settings.mongo?.url, ['notifications']) +ObjectId = require("mongojs").ObjectId module.exports = - getUserUnreadNotifications: (user_id, callback = (err, user)->)-> - db.notifications.find {"user_id" : user_id}, (err, user)-> - callback err, user + getUserNotifications: (user_id, callback = (err, notifications)->)-> + query = + user_id: user_id + templateKey: {"$exists":true} + db.notifications.find query, (err, notifications)-> + callback err, notifications addNotification: (user_id, notification, callback)-> - doc = + query = user_id: user_id key: notification.key - messageOpts: notification.messageOpts - templateKey: notification.templateKey - db.notifications.insert(doc, callback) + db.notifications.count query, (err, number)-> + if number > 0 + logger.log number:number, user_id:user_id, key:notification.key, "alredy has notification key for user" + callback number + else + doc = + user_id: user_id + key: notification.key + messageOpts: notification.messageOpts + templateKey: notification.templateKey + db.notifications.insert(doc, callback) - removeNotification: (user_id, notification_key, callback)-> + removeNotification: (user_id, notification_id, callback)-> searchOps = user_id:user_id - key:notification_key + _id:ObjectId(notification_id) updateOperation = - "$set": {read:true} + "$unset": {templateKey:true} db.notifications.update searchOps, updateOperation, callback diff --git a/services/notifications/app/coffee/NotificationsController.coffee b/services/notifications/app/coffee/NotificationsController.coffee index 52772ccbaf..035cf6d3ec 100644 --- a/services/notifications/app/coffee/NotificationsController.coffee +++ b/services/notifications/app/coffee/NotificationsController.coffee @@ -5,15 +5,18 @@ module.exports = getUserNotifications: (req, res)-> logger.log user_id: req.params.user_id, "getting user unread notifications" - Notifications.getUserUnreadNotifications req.params.user_id, (err, notifications)-> + Notifications.getUserNotifications req.params.user_id, (err, notifications)-> res.json(notifications) addNotification: (req, res)-> logger.log user_id: req.params.user_id, notification:req.body, "adding notification" Notifications.addNotification req.params.user_id, req.body, (err, notifications)-> - res.send() + if err? + res.send 500 + else + res.send() - removeNotificacion: (req, res)-> - logger.log user_id: req.params.user_id, notification_key:req.params.key "removing notification" - Notifications.removeNotification req.params.user_id, req.params.key, (err, notifications)-> + removeNotification: (req, res)-> + logger.log user_id: req.params.user_id, notification_id: req.params.notification_id, "removing notification" + Notifications.removeNotification req.params.user_id, req.params.notification_id, (err, notifications)-> res.send()