MessageManager.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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 { db, ObjectId } = require('../../mongodb')
  17. const metrics = require('@overleaf/metrics')
  18. const logger = require('logger-sharelatex')
  19. module.exports = MessageManager = {
  20. createMessage(room_id, user_id, content, timestamp, callback) {
  21. if (callback == null) {
  22. callback = function (error, message) {}
  23. }
  24. let newMessageOpts = {
  25. content,
  26. room_id,
  27. user_id,
  28. timestamp
  29. }
  30. newMessageOpts = this._ensureIdsAreObjectIds(newMessageOpts)
  31. db.messages.insertOne(newMessageOpts, function (error, confirmation) {
  32. if (error) {
  33. return callback(error)
  34. }
  35. newMessageOpts._id = confirmation.insertedId
  36. callback(null, newMessageOpts)
  37. })
  38. },
  39. getMessages(room_id, limit, before, callback) {
  40. if (callback == null) {
  41. callback = function (error, messages) {}
  42. }
  43. let query = { room_id }
  44. if (before != null) {
  45. query.timestamp = { $lt: before }
  46. }
  47. query = this._ensureIdsAreObjectIds(query)
  48. db.messages
  49. .find(query)
  50. .sort({ timestamp: -1 })
  51. .limit(limit)
  52. .toArray(callback)
  53. },
  54. findAllMessagesInRooms(room_ids, callback) {
  55. if (callback == null) {
  56. callback = function (error, messages) {}
  57. }
  58. db.messages
  59. .find({
  60. room_id: { $in: room_ids }
  61. })
  62. .toArray(callback)
  63. },
  64. deleteAllMessagesInRoom(room_id, callback) {
  65. if (callback == null) {
  66. callback = function (error) {}
  67. }
  68. db.messages.deleteMany(
  69. {
  70. room_id
  71. },
  72. callback
  73. )
  74. },
  75. updateMessage(room_id, message_id, content, timestamp, callback) {
  76. if (callback == null) {
  77. callback = function (error, message) {}
  78. }
  79. const query = this._ensureIdsAreObjectIds({
  80. _id: message_id,
  81. room_id
  82. })
  83. db.messages.updateOne(
  84. query,
  85. {
  86. $set: {
  87. content,
  88. edited_at: timestamp
  89. }
  90. },
  91. callback
  92. )
  93. },
  94. deleteMessage(room_id, message_id, callback) {
  95. if (callback == null) {
  96. callback = function (error) {}
  97. }
  98. const query = this._ensureIdsAreObjectIds({
  99. _id: message_id,
  100. room_id
  101. })
  102. db.messages.deleteOne(query, callback)
  103. },
  104. _ensureIdsAreObjectIds(query) {
  105. if (query.user_id != null && !(query.user_id instanceof ObjectId)) {
  106. query.user_id = ObjectId(query.user_id)
  107. }
  108. if (query.room_id != null && !(query.room_id instanceof ObjectId)) {
  109. query.room_id = ObjectId(query.room_id)
  110. }
  111. if (query._id != null && !(query._id instanceof ObjectId)) {
  112. query._id = ObjectId(query._id)
  113. }
  114. return query
  115. }
  116. }
  117. ;[
  118. 'createMessage',
  119. 'getMessages',
  120. 'findAllMessagesInRooms',
  121. 'updateMessage',
  122. 'deleteMessage'
  123. ].map((method) =>
  124. metrics.timeAsyncMethod(
  125. MessageManager,
  126. method,
  127. 'mongo.MessageManager',
  128. logger
  129. )
  130. )