Files
overleaf-cep/services/web/app/src/Features/Project/ProjectCollabratecDetailsHandler.mjs
T
Antoine Clausse ccf3f13fd2 Merge pull request #28273 from overleaf/ac-some-web-esm-migration
[web] Convert some Features files to ES modules (part 1)

GitOrigin-RevId: d19b024efad315143e022143e2a2683df8071744
2025-09-09 08:06:22 +00:00

104 lines
2.5 KiB
JavaScript

import mongodb from 'mongodb-legacy'
import { Project } from '../../models/Project.js'
import { callbackifyAll } from '@overleaf/promise-utils'
const { ObjectId } = mongodb
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()
},
}
export default {
...callbackifyAll(ProjectCollabratecDetailsHandler),
promises: ProjectCollabratecDetailsHandler,
}