Files
overleaf-cep/services/web/app/src/Features/Project/ProjectCollabratecDetailsHandler.js
andrew rumble b00d1336d4 Switch to mongodb-legacy
GitOrigin-RevId: 11e09528c153de6b7766d18c3c90d94962190371
2024-08-21 08:04:24 +00:00

101 lines
2.5 KiB
JavaScript

const { ObjectId } = require('mongodb-legacy')
const { Project } = require('../../models/Project')
const { callbackifyAll } = require('@overleaf/promise-utils')
const ProjectCollabratecDetailsHandler = {
async initializeCollabratecProject(
projectId,
userId,
collabratecDocumentId,
collabratecPrivategroupId
) {
return await ProjectCollabratecDetailsHandler.setCollabratecUsers(
projectId,
[
{
user_id: userId,
collabratec_document_id: collabratecDocumentId,
collabratec_privategroup_id: collabratecPrivategroupId,
},
]
)
},
async isLinkedCollabratecUserProject(projectId, userId) {
projectId = new ObjectId(projectId)
userId = new ObjectId(userId)
const query = {
_id: projectId,
collabratecUsers: {
$elemMatch: {
user_id: userId,
},
},
}
const project = await Project.findOne(query, { _id: 1 }).exec()
return project != null
},
async linkCollabratecUserProject(projectId, userId, collabratecDocumentId) {
projectId = new ObjectId(projectId)
userId = new ObjectId(userId)
const query = {
_id: projectId,
collabratecUsers: {
$not: {
$elemMatch: {
collabratec_document_id: collabratecDocumentId,
user_id: userId,
},
},
},
}
const update = {
$push: {
collabratecUsers: {
collabratec_document_id: collabratecDocumentId,
user_id: userId,
},
},
}
return await Project.updateOne(query, update).exec()
},
async setCollabratecUsers(projectId, collabratecUsers) {
projectId = new ObjectId(projectId)
if (!Array.isArray(collabratecUsers)) {
throw new Error('collabratec_users must be array')
}
for (const collabratecUser of collabratecUsers) {
collabratecUser.user_id = new ObjectId(collabratecUser.user_id)
}
const update = { $set: { collabratecUsers } }
return await Project.updateOne({ _id: projectId }, update).exec()
},
async unlinkCollabratecUserProject(projectId, userId) {
projectId = new ObjectId(projectId)
userId = new ObjectId(userId)
const query = { _id: projectId }
const update = {
$pull: {
collabratecUsers: {
user_id: userId,
},
},
}
await Project.updateOne(query, update).exec()
},
}
module.exports = {
...callbackifyAll(ProjectCollabratecDetailsHandler),
promises: ProjectCollabratecDetailsHandler,
}