decaffeinate: Convert ContactManager.coffee and 3 other files to JS

This commit is contained in:
decaffeinate 2020-02-17 07:37:54 +00:00 committed by Simon Detheridge
parent 683b9a7cb3
commit af36ed629b
4 changed files with 135 additions and 93 deletions

View file

@ -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));

View file

@ -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});

View file

@ -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;
}
}
});
}
});

View file

@ -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
};