Files
overleaf-cep/services/contacts/app/js/HttpController.js
2020-02-17 10:54:55 +00:00

95 lines
2.4 KiB
JavaScript

/* eslint-disable
camelcase,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
* 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) {
const {user_id} = req.params;
const {contact_id} = req.body;
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");
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) {
let limit;
let {user_id} = req.params;
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");
return ContactManager.getContacts(user_id, function(error, contact_dict) {
if (error != null) { return next(error); }
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);
const contact_ids = contacts.map(contact => contact.user_id);
return res.status(200).send({
contact_ids
});
});
},
_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;
}
}
});
}
});