MessageManager.js 3.2 KB

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