MessageManager.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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) { callback = function(error, message) {}; }
  25. let newMessageOpts = {
  26. content,
  27. room_id,
  28. user_id,
  29. timestamp
  30. };
  31. newMessageOpts = this._ensureIdsAreObjectIds(newMessageOpts);
  32. return db.messages.save(newMessageOpts, callback);
  33. },
  34. getMessages(room_id, limit, before, callback) {
  35. if (callback == null) { callback = function(error, messages) {}; }
  36. let query =
  37. {room_id};
  38. if (before != null) {
  39. query.timestamp = { $lt: before };
  40. }
  41. query = this._ensureIdsAreObjectIds(query);
  42. const cursor = db.messages.find(query).sort({ timestamp: -1 }).limit(limit);
  43. return cursor.toArray(callback);
  44. },
  45. findAllMessagesInRooms(room_ids, callback) {
  46. if (callback == null) { callback = function(error, messages) {}; }
  47. return db.messages.find({
  48. room_id: { $in: room_ids }
  49. }, callback);
  50. },
  51. deleteAllMessagesInRoom(room_id, callback) {
  52. if (callback == null) { callback = function(error) {}; }
  53. return db.messages.remove({
  54. room_id
  55. }, callback);
  56. },
  57. updateMessage(room_id, message_id, content, timestamp, callback) {
  58. if (callback == null) { callback = function(error, message) {}; }
  59. const query = this._ensureIdsAreObjectIds({
  60. _id: message_id,
  61. room_id
  62. });
  63. return db.messages.update(query, {
  64. $set: {
  65. content,
  66. edited_at: timestamp
  67. }
  68. }, function(error) {
  69. if (error != null) { return callback(error); }
  70. return callback();
  71. });
  72. },
  73. deleteMessage(room_id, message_id, callback) {
  74. if (callback == null) { callback = function(error) {}; }
  75. const query = this._ensureIdsAreObjectIds({
  76. _id: message_id,
  77. room_id
  78. });
  79. return db.messages.remove(query, function(error) {
  80. if (error != null) { return callback(error); }
  81. return callback();
  82. });
  83. },
  84. _ensureIdsAreObjectIds(query) {
  85. if ((query.user_id != null) && !(query.user_id instanceof ObjectId)) {
  86. query.user_id = ObjectId(query.user_id);
  87. }
  88. if ((query.room_id != null) && !(query.room_id instanceof ObjectId)) {
  89. query.room_id = ObjectId(query.room_id);
  90. }
  91. if ((query._id != null) && !(query._id instanceof ObjectId)) {
  92. query._id = ObjectId(query._id);
  93. }
  94. return query;
  95. }
  96. });
  97. [
  98. 'createMessage',
  99. 'getMessages',
  100. 'findAllMessagesInRooms',
  101. 'updateMessage',
  102. 'deleteMessage'
  103. ].map(method => metrics.timeAsyncMethod(MessageManager, method, 'mongo.MessageManager', logger));