MessageManager.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. /* eslint-disable
  2. camelcase,
  3. handle-callback-err,
  4. max-len,
  5. no-unused-vars,
  6. */
  7. // TODO: This file was created by bulk-decaffeinate.
  8. // Fix any style issues and re-enable lint.
  9. /*
  10. * decaffeinate suggestions:
  11. * DS102: Remove unnecessary code created because of implicit returns
  12. * DS207: Consider shorter variations of null checks
  13. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  14. */
  15. let MessageManager
  16. const mongojs = require('../../mongojs')
  17. const { db } = mongojs
  18. const { ObjectId } = mongojs
  19. const async = require('async')
  20. const metrics = require('metrics-sharelatex')
  21. const logger = require('logger-sharelatex')
  22. module.exports = MessageManager = {
  23. createMessage(room_id, user_id, content, timestamp, callback) {
  24. if (callback == null) {
  25. callback = function(error, message) {}
  26. }
  27. let newMessageOpts = {
  28. content,
  29. room_id,
  30. user_id,
  31. timestamp
  32. }
  33. newMessageOpts = this._ensureIdsAreObjectIds(newMessageOpts)
  34. return db.messages.save(newMessageOpts, callback)
  35. },
  36. getMessages(room_id, limit, before, callback) {
  37. if (callback == null) {
  38. callback = function(error, messages) {}
  39. }
  40. let query = { room_id }
  41. if (before != null) {
  42. query.timestamp = { $lt: before }
  43. }
  44. query = this._ensureIdsAreObjectIds(query)
  45. const cursor = db.messages
  46. .find(query)
  47. .sort({ timestamp: -1 })
  48. .limit(limit)
  49. return cursor.toArray(callback)
  50. },
  51. findAllMessagesInRooms(room_ids, callback) {
  52. if (callback == null) {
  53. callback = function(error, messages) {}
  54. }
  55. return db.messages.find(
  56. {
  57. room_id: { $in: room_ids }
  58. },
  59. callback
  60. )
  61. },
  62. deleteAllMessagesInRoom(room_id, callback) {
  63. if (callback == null) {
  64. callback = function(error) {}
  65. }
  66. return db.messages.remove(
  67. {
  68. room_id
  69. },
  70. callback
  71. )
  72. },
  73. updateMessage(room_id, message_id, content, timestamp, callback) {
  74. if (callback == null) {
  75. callback = function(error, message) {}
  76. }
  77. const query = this._ensureIdsAreObjectIds({
  78. _id: message_id,
  79. room_id
  80. })
  81. return db.messages.update(
  82. query,
  83. {
  84. $set: {
  85. content,
  86. edited_at: timestamp
  87. }
  88. },
  89. function(error) {
  90. if (error != null) {
  91. return callback(error)
  92. }
  93. return callback()
  94. }
  95. )
  96. },
  97. deleteMessage(room_id, message_id, callback) {
  98. if (callback == null) {
  99. callback = function(error) {}
  100. }
  101. const query = this._ensureIdsAreObjectIds({
  102. _id: message_id,
  103. room_id
  104. })
  105. return db.messages.remove(query, function(error) {
  106. if (error != null) {
  107. return callback(error)
  108. }
  109. return callback()
  110. })
  111. },
  112. _ensureIdsAreObjectIds(query) {
  113. if (query.user_id != null && !(query.user_id instanceof ObjectId)) {
  114. query.user_id = ObjectId(query.user_id)
  115. }
  116. if (query.room_id != null && !(query.room_id instanceof ObjectId)) {
  117. query.room_id = ObjectId(query.room_id)
  118. }
  119. if (query._id != null && !(query._id instanceof ObjectId)) {
  120. query._id = ObjectId(query._id)
  121. }
  122. return query
  123. }
  124. }
  125. ;[
  126. 'createMessage',
  127. 'getMessages',
  128. 'findAllMessagesInRooms',
  129. 'updateMessage',
  130. 'deleteMessage'
  131. ].map(method =>
  132. metrics.timeAsyncMethod(
  133. MessageManager,
  134. method,
  135. 'mongo.MessageManager',
  136. logger
  137. )
  138. )