mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-28 03:21:56 +02:00
101 lines
2.5 KiB
JavaScript
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,
|
|
}
|