| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- ContactManager = require "./ContactManager"
- WebApiManager = require "./WebApiManager"
- logger = require "logger-sharelatex"
- async = require "async"
- 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)
- async.mapLimit contacts, 5,
- (contact, cb) ->
- WebApiManager.getUserDetails contact.user_id, (error, user) ->
- return cb(error) if error?
- cb null, HttpController._formatUser user
- (error, users) ->
- return next(error) if error?
- res.status(200).send({
- contacts: users
- })
-
- _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
-
- _formatUser: (user) ->
- return {
- id: user._id
- email: user.email
- first_name: user.first_name
- last_name: user.last_name
- }
|