ThreadManager.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. /* eslint-disable
  2. camelcase,
  3. max-len,
  4. */
  5. // TODO: This file was created by bulk-decaffeinate.
  6. // Fix any style issues and re-enable lint.
  7. /*
  8. * decaffeinate suggestions:
  9. * DS102: Remove unnecessary code created because of implicit returns
  10. * DS207: Consider shorter variations of null checks
  11. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  12. */
  13. let ThreadManager
  14. const { db, ObjectId } = require('../../mongodb')
  15. const logger = require('logger-sharelatex')
  16. const metrics = require('@overleaf/metrics')
  17. module.exports = ThreadManager = {
  18. GLOBAL_THREAD: 'GLOBAL',
  19. findOrCreateThread(project_id, thread_id, callback) {
  20. let query, update
  21. if (callback == null) {
  22. callback = function () {}
  23. }
  24. project_id = ObjectId(project_id.toString())
  25. if (thread_id !== ThreadManager.GLOBAL_THREAD) {
  26. thread_id = ObjectId(thread_id.toString())
  27. }
  28. if (thread_id === ThreadManager.GLOBAL_THREAD) {
  29. query = {
  30. project_id,
  31. thread_id: { $exists: false },
  32. }
  33. update = {
  34. project_id,
  35. }
  36. } else {
  37. query = {
  38. project_id,
  39. thread_id,
  40. }
  41. update = {
  42. project_id,
  43. thread_id,
  44. }
  45. }
  46. db.rooms.updateOne(
  47. query,
  48. { $set: update },
  49. { upsert: true },
  50. function (error) {
  51. if (error != null) {
  52. return callback(error)
  53. }
  54. db.rooms.findOne(query, callback)
  55. }
  56. )
  57. },
  58. findAllThreadRooms(project_id, callback) {
  59. if (callback == null) {
  60. callback = function () {}
  61. }
  62. db.rooms
  63. .find(
  64. {
  65. project_id: ObjectId(project_id.toString()),
  66. thread_id: { $exists: true },
  67. },
  68. {
  69. thread_id: 1,
  70. resolved: 1,
  71. }
  72. )
  73. .toArray(callback)
  74. },
  75. resolveThread(project_id, thread_id, user_id, callback) {
  76. if (callback == null) {
  77. callback = function () {}
  78. }
  79. db.rooms.updateOne(
  80. {
  81. project_id: ObjectId(project_id.toString()),
  82. thread_id: ObjectId(thread_id.toString()),
  83. },
  84. {
  85. $set: {
  86. resolved: {
  87. user_id,
  88. ts: new Date(),
  89. },
  90. },
  91. },
  92. callback
  93. )
  94. },
  95. reopenThread(project_id, thread_id, callback) {
  96. if (callback == null) {
  97. callback = function () {}
  98. }
  99. db.rooms.updateOne(
  100. {
  101. project_id: ObjectId(project_id.toString()),
  102. thread_id: ObjectId(thread_id.toString()),
  103. },
  104. {
  105. $unset: {
  106. resolved: true,
  107. },
  108. },
  109. callback
  110. )
  111. },
  112. deleteThread(project_id, thread_id, callback) {
  113. if (callback == null) {
  114. callback = function () {}
  115. }
  116. return this.findOrCreateThread(
  117. project_id,
  118. thread_id,
  119. function (error, room) {
  120. if (error != null) {
  121. return callback(error)
  122. }
  123. db.rooms.deleteOne(
  124. {
  125. _id: room._id,
  126. },
  127. function (error) {
  128. if (error != null) {
  129. return callback(error)
  130. }
  131. return callback(null, room._id)
  132. }
  133. )
  134. }
  135. )
  136. },
  137. }
  138. ;[
  139. 'findOrCreateThread',
  140. 'findAllThreadRooms',
  141. 'resolveThread',
  142. 'reopenThread',
  143. 'deleteThread',
  144. ].map(method =>
  145. metrics.timeAsyncMethod(ThreadManager, method, 'mongo.ThreadManager', logger)
  146. )