ProjectCollabratecDetailsHandler.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. const { ObjectId } = require('mongodb')
  2. const { Project } = require('../../models/Project')
  3. const { callbackifyAll } = require('@overleaf/promise-utils')
  4. const ProjectCollabratecDetailsHandler = {
  5. async initializeCollabratecProject(
  6. projectId,
  7. userId,
  8. collabratecDocumentId,
  9. collabratecPrivategroupId
  10. ) {
  11. return await ProjectCollabratecDetailsHandler.setCollabratecUsers(
  12. projectId,
  13. [
  14. {
  15. user_id: userId,
  16. collabratec_document_id: collabratecDocumentId,
  17. collabratec_privategroup_id: collabratecPrivategroupId,
  18. },
  19. ]
  20. )
  21. },
  22. async isLinkedCollabratecUserProject(projectId, userId) {
  23. projectId = new ObjectId(projectId)
  24. userId = new ObjectId(userId)
  25. const query = {
  26. _id: projectId,
  27. collabratecUsers: {
  28. $elemMatch: {
  29. user_id: userId,
  30. },
  31. },
  32. }
  33. const project = await Project.findOne(query, { _id: 1 }).exec()
  34. return project != null
  35. },
  36. async linkCollabratecUserProject(projectId, userId, collabratecDocumentId) {
  37. projectId = new ObjectId(projectId)
  38. userId = new ObjectId(userId)
  39. const query = {
  40. _id: projectId,
  41. collabratecUsers: {
  42. $not: {
  43. $elemMatch: {
  44. collabratec_document_id: collabratecDocumentId,
  45. user_id: userId,
  46. },
  47. },
  48. },
  49. }
  50. const update = {
  51. $push: {
  52. collabratecUsers: {
  53. collabratec_document_id: collabratecDocumentId,
  54. user_id: userId,
  55. },
  56. },
  57. }
  58. return await Project.updateOne(query, update).exec()
  59. },
  60. async setCollabratecUsers(projectId, collabratecUsers) {
  61. projectId = new ObjectId(projectId)
  62. if (!Array.isArray(collabratecUsers)) {
  63. throw new Error('collabratec_users must be array')
  64. }
  65. for (const collabratecUser of collabratecUsers) {
  66. collabratecUser.user_id = new ObjectId(collabratecUser.user_id)
  67. }
  68. const update = { $set: { collabratecUsers } }
  69. return await Project.updateOne({ _id: projectId }, update).exec()
  70. },
  71. async unlinkCollabratecUserProject(projectId, userId) {
  72. projectId = new ObjectId(projectId)
  73. userId = new ObjectId(userId)
  74. const query = { _id: projectId }
  75. const update = {
  76. $pull: {
  77. collabratecUsers: {
  78. user_id: userId,
  79. },
  80. },
  81. }
  82. await Project.updateOne(query, update).exec()
  83. },
  84. }
  85. module.exports = {
  86. ...callbackifyAll(ProjectCollabratecDetailsHandler),
  87. promises: ProjectCollabratecDetailsHandler,
  88. }