diff --git a/services/contacts/app/coffee/ContactManager.js b/services/contacts/app/coffee/ContactManager.js index c39ba200f7..5b7d61f01b 100644 --- a/services/contacts/app/coffee/ContactManager.js +++ b/services/contacts/app/coffee/ContactManager.js @@ -1,38 +1,54 @@ -{db, ObjectId} = require "./mongojs" -logger = require('logger-sharelatex') -metrics = require('metrics-sharelatex') +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS207: Consider shorter variations of null checks + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +let ContactManager; +const {db, ObjectId} = require("./mongojs"); +const logger = require('logger-sharelatex'); +const metrics = require('metrics-sharelatex'); -module.exports = ContactManager = - touchContact: (user_id, contact_id, callback = (error) ->) -> - try - user_id = ObjectId(user_id.toString()) - catch error - return callback error +module.exports = (ContactManager = { + touchContact(user_id, contact_id, callback) { + if (callback == null) { callback = function(error) {}; } + try { + user_id = ObjectId(user_id.toString()); + } catch (error1) { + const error = error1; + return callback(error); + } - update = { $set: {}, $inc: {} } - update.$inc["contacts.#{contact_id}.n"] = 1 - update.$set["contacts.#{contact_id}.ts"] = new Date() + const update = { $set: {}, $inc: {} }; + update.$inc[`contacts.${contact_id}.n`] = 1; + update.$set[`contacts.${contact_id}.ts`] = new Date(); - db.contacts.update({ - user_id: user_id + return db.contacts.update({ + user_id }, update, { upsert: true - }, callback) + }, callback); + }, - getContacts: (user_id, callback = (error) ->) -> - try - user_id = ObjectId(user_id.toString()) - catch error - return callback error + getContacts(user_id, callback) { + if (callback == null) { callback = function(error) {}; } + try { + user_id = ObjectId(user_id.toString()); + } catch (error1) { + const error = error1; + return callback(error); + } - db.contacts.findOne { - user_id: user_id - }, (error, user) -> - return callback(error) if error? - callback null, user?.contacts + return db.contacts.findOne({ + user_id + }, function(error, user) { + if (error != null) { return callback(error); } + return callback(null, user != null ? user.contacts : undefined); + }); + } +}); [ 'touchContact', 'getContacts', -].map (method) -> - metrics.timeAsyncMethod(ContactManager, method, 'mongo.ContactManager', logger) +].map(method => metrics.timeAsyncMethod(ContactManager, method, 'mongo.ContactManager', logger)); diff --git a/services/contacts/app/coffee/Errors.js b/services/contacts/app/coffee/Errors.js index 4a29822efc..1345cc0f86 100644 --- a/services/contacts/app/coffee/Errors.js +++ b/services/contacts/app/coffee/Errors.js @@ -1,10 +1,12 @@ -NotFoundError = (message) -> - error = new Error(message) - error.name = "NotFoundError" - error.__proto__ = NotFoundError.prototype - return error -NotFoundError.prototype.__proto__ = Error.prototype +let Errors; +var NotFoundError = function(message) { + const error = new Error(message); + error.name = "NotFoundError"; + error.__proto__ = NotFoundError.prototype; + return error; +}; +NotFoundError.prototype.__proto__ = Error.prototype; -module.exports = Errors = - NotFoundError: NotFoundError +module.exports = (Errors = + {NotFoundError}); diff --git a/services/contacts/app/coffee/HttpController.js b/services/contacts/app/coffee/HttpController.js index 170a50150d..4d97420fff 100644 --- a/services/contacts/app/coffee/HttpController.js +++ b/services/contacts/app/coffee/HttpController.js @@ -1,66 +1,89 @@ -ContactManager = require "./ContactManager" -logger = require "logger-sharelatex" +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS207: Consider shorter variations of null checks + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +let HttpController; +const ContactManager = require("./ContactManager"); +const logger = require("logger-sharelatex"); -module.exports = HttpController = - addContact: (req, res, next) -> - {user_id} = req.params - {contact_id} = req.body +module.exports = (HttpController = { + addContact(req, res, next) { + const {user_id} = req.params; + const {contact_id} = req.body; - if !contact_id? or contact_id == "" - res.status(400).send("contact_id should be a non-blank string") - return + if ((contact_id == null) || (contact_id === "")) { + res.status(400).send("contact_id should be a non-blank string"); + return; + } - logger.log {user_id, contact_id}, "adding contact" + logger.log({user_id, contact_id}, "adding contact"); - ContactManager.touchContact user_id, contact_id, (error) -> - return next(error) if error? - ContactManager.touchContact contact_id, user_id, (error) -> - return next(error) if error? - res.status(204).end() + return ContactManager.touchContact(user_id, contact_id, function(error) { + if (error != null) { return next(error); } + return ContactManager.touchContact(contact_id, user_id, function(error) { + if (error != null) { return next(error); } + return res.status(204).end(); + }); + }); + }, - CONTACT_LIMIT: 50 - getContacts: (req, res, next) -> - {user_id} = req.params + CONTACT_LIMIT: 50, + getContacts(req, res, next) { + let limit; + let {user_id} = req.params; - if req.query?.limit? - limit = parseInt(req.query.limit, 10) - else - limit = HttpController.CONTACT_LIMIT - limit = Math.min(limit, HttpController.CONTACT_LIMIT) + if ((req.query != null ? req.query.limit : undefined) != null) { + limit = parseInt(req.query.limit, 10); + } else { + limit = HttpController.CONTACT_LIMIT; + } + limit = Math.min(limit, HttpController.CONTACT_LIMIT); - logger.log {user_id}, "getting contacts" + logger.log({user_id}, "getting contacts"); - ContactManager.getContacts user_id, (error, contact_dict) -> - return next(error) if error? + return ContactManager.getContacts(user_id, function(error, contact_dict) { + if (error != null) { return next(error); } - contacts = [] - for user_id, data of (contact_dict or {}) - contacts.push { - user_id: user_id - n: data.n + let contacts = []; + const object = contact_dict || {}; + for (user_id in object) { + const data = object[user_id]; + contacts.push({ + user_id, + n: data.n, ts: data.ts - } + }); + } - HttpController._sortContacts contacts - contacts = contacts.slice(0, limit) - contact_ids = contacts.map (contact) -> contact.user_id + HttpController._sortContacts(contacts); + contacts = contacts.slice(0, limit); + const contact_ids = contacts.map(contact => contact.user_id); - res.status(200).send({ - contact_ids: contact_ids - }) + return res.status(200).send({ + contact_ids + }); + }); + }, - _sortContacts: (contacts) -> - contacts.sort (a, b) -> - # Sort by decreasing count, descreasing timestamp. - # I.e. biggest count, and most recent at front. - if a.n > b.n - return -1 - else if a.n < b.n - return 1 - else - if a.ts > b.ts - return -1 - else if a.ts < b.ts - return 1 - else - return 0 + _sortContacts(contacts) { + return contacts.sort(function(a, b) { + // Sort by decreasing count, descreasing timestamp. + // I.e. biggest count, and most recent at front. + if (a.n > b.n) { + return -1; + } else if (a.n < b.n) { + return 1; + } else { + if (a.ts > b.ts) { + return -1; + } else if (a.ts < b.ts) { + return 1; + } else { + return 0; + } + } + }); + } +}); diff --git a/services/contacts/app/coffee/mongojs.js b/services/contacts/app/coffee/mongojs.js index d3afb83a53..9cc9a6e9de 100644 --- a/services/contacts/app/coffee/mongojs.js +++ b/services/contacts/app/coffee/mongojs.js @@ -1,7 +1,8 @@ -Settings = require "settings-sharelatex" -mongojs = require "mongojs" -db = mongojs(Settings.mongo.url, ["contacts"]) -module.exports = - db: db +const Settings = require("settings-sharelatex"); +const mongojs = require("mongojs"); +const db = mongojs(Settings.mongo.url, ["contacts"]); +module.exports = { + db, ObjectId: mongojs.ObjectId +};