overleaf/services/contacts/app/coffee/HttpController.js

66 lines
1.6 KiB
JavaScript

ContactManager = require "./ContactManager"
logger = require "logger-sharelatex"
module.exports = HttpController =
addContact: (req, res, next) ->
{user_id} = req.params
{contact_id} = req.body
if !contact_id? or contact_id == ""
res.status(400).send("contact_id should be a non-blank string")
return
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()
CONTACT_LIMIT: 50
getContacts: (req, res, next) ->
{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)
logger.log {user_id}, "getting contacts"
ContactManager.getContacts user_id, (error, contact_dict) ->
return next(error) if error?
contacts = []
for user_id, data of (contact_dict or {})
contacts.push {
user_id: user_id
n: data.n
ts: data.ts
}
HttpController._sortContacts contacts
contacts = contacts.slice(0, limit)
contact_ids = contacts.map (contact) -> contact.user_id
res.status(200).send({
contact_ids: 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