ProjectCollabratecDetailsHandler.mjs 2.5 KB

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