Files
Verso/services/web/app/src/Features/Project/ProjectCollabratecDetailsHandler.js
T
David 857a45edeb Merge pull request #17171 from overleaf/dp-mongoose-callback-project-collabratec
Promisify ProjectCollabratecDetailsHandler and ProjectCollabratecDetailsHandlerTest

GitOrigin-RevId: efd911dcbba58f706adfd3b7a5c043280f6cc1af
2024-03-05 09:03:22 +00:00

101 lines
2.5 KiB
JavaScript

const { ObjectId } = require('mongodb')
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,
}