MessageManager.coffee 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. mongojs = require "../../mongojs"
  2. db = mongojs.db
  3. ObjectId = mongojs.ObjectId
  4. WebApiManager = require "../WebApi/WebApiManager"
  5. async = require "async"
  6. module.exports = MessageManager =
  7. createMessage: (message, callback = (error, message) ->) ->
  8. message = @_ensureIdsAreObjectIds(message)
  9. db.messages.save message, callback
  10. getMessages: (query, options, callback = (error, messages) ->) ->
  11. query = @_ensureIdsAreObjectIds(query)
  12. cursor = db.messages.find(query)
  13. if options.order_by?
  14. options.sort_order ||= 1
  15. sortQuery = {}
  16. sortQuery[options.order_by] = options.sort_order
  17. cursor = cursor.sort(sortQuery)
  18. if options.limit?
  19. cursor = cursor.limit(options.limit)
  20. cursor.toArray callback
  21. populateMessagesWithUsers: (messages, callback = (error, messages) ->) ->
  22. jobs = new Array()
  23. userCache = {}
  24. getUserDetails = (user_id, callback = (error, user) ->) ->
  25. return callback(null, userCache[user_id]) if userCache[user_id]?
  26. WebApiManager.getUserDetails user_id, (error, user) ->
  27. return callback(error) if error?
  28. userCache[user_id] = user
  29. callback null, user
  30. for message in messages
  31. do (message) ->
  32. if !message?
  33. return
  34. jobs.push (callback) ->
  35. getUserDetails message.user_id.toString(), (error, user) ->
  36. return callback(error) if error?
  37. delete message.user_id
  38. message.user = user
  39. callback(null, message)
  40. async.series jobs, callback
  41. _ensureIdsAreObjectIds: (query) ->
  42. if query.user_id? and query.user_id not instanceof ObjectId
  43. query.user_id = ObjectId(query.user_id)
  44. if query.room_id? and query.room_id not instanceof ObjectId
  45. query.room_id = ObjectId(query.room_id)
  46. return query