MessageManager.coffee 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. mongojs = require "../../mongojs"
  2. db = mongojs.db
  3. ObjectId = mongojs.ObjectId
  4. async = require "async"
  5. metrics = require 'metrics-sharelatex'
  6. logger = require 'logger-sharelatex'
  7. module.exports = MessageManager =
  8. createMessage: (room_id, user_id, content, timestamp, callback = (error, message) ->) ->
  9. newMessageOpts =
  10. content: content
  11. room_id: room_id
  12. user_id: user_id
  13. timestamp: timestamp
  14. newMessageOpts = @_ensureIdsAreObjectIds(newMessageOpts)
  15. db.messages.save newMessageOpts, callback
  16. getMessages: (room_id, limit, before, callback = (error, messages) ->) ->
  17. query =
  18. room_id: room_id
  19. if before?
  20. query.timestamp = { $lt: before }
  21. query = @_ensureIdsAreObjectIds(query)
  22. cursor = db.messages.find(query).sort({ timestamp: -1 }).limit(limit)
  23. cursor.toArray callback
  24. findAllMessagesInRooms: (room_ids, callback = (error, messages) ->) ->
  25. db.messages.find {
  26. room_id: { $in: room_ids }
  27. }, callback
  28. deleteAllMessagesInRoom: (room_id, callback = (error) ->) ->
  29. db.messages.remove {
  30. room_id: room_id
  31. }, callback
  32. updateMessage: (room_id, message_id, content, timestamp, callback = (error, message) ->) ->
  33. query = @_ensureIdsAreObjectIds(
  34. _id: message_id
  35. room_id: room_id
  36. )
  37. db.messages.update query, {
  38. $set:
  39. content: content
  40. edited_at: timestamp
  41. }, (error) ->
  42. return callback(error) if error?
  43. return callback()
  44. deleteMessage: (room_id, message_id, callback = (error) ->) ->
  45. query = @_ensureIdsAreObjectIds(
  46. _id: message_id
  47. room_id: room_id
  48. )
  49. db.messages.remove query, (error) ->
  50. return callback(error) if error?
  51. return callback()
  52. _ensureIdsAreObjectIds: (query) ->
  53. if query.user_id? and query.user_id not instanceof ObjectId
  54. query.user_id = ObjectId(query.user_id)
  55. if query.room_id? and query.room_id not instanceof ObjectId
  56. query.room_id = ObjectId(query.room_id)
  57. if query._id? and query._id not instanceof ObjectId
  58. query._id = ObjectId(query._id)
  59. return query
  60. [
  61. 'createMessage',
  62. 'getMessages',
  63. 'findAllMessagesInRooms',
  64. 'updateMessage',
  65. 'deleteMessage'
  66. ].map (method) ->
  67. metrics.timeAsyncMethod(MessageManager, method, 'mongo.MessageManager', logger)