Merge pull request #3653 from overleaf/jpa-merge-deleted-docs-sources

[EditorHttpController] fetch deletedDocs from docstore, merge w/ project

GitOrigin-RevId: 5cf46aa7ded034285051ddae21b5c80d8c806693
This commit is contained in:
Jakob Ackermann
2021-04-06 11:15:16 +02:00
committed by Copybot
parent 92194202d7
commit 3bdf7afbbf
7 changed files with 141 additions and 5 deletions

View File

@@ -85,6 +85,28 @@ const DocstoreManager = {
)
},
getAllDeletedDocs(project_id, callback) {
const url = `${settings.apis.docstore.url}/project/${project_id}/doc-deleted`
request.get({ url, timeout: TIMEOUT, json: true }, function(
error,
res,
docs
) {
if (error) {
callback(OError.tag(error, 'could not get deleted docs from docstore'))
} else if (res.statusCode === 200) {
callback(null, docs)
} else {
callback(
new OError(
`docstore api responded with non-success code: ${res.statusCode}`,
{ project_id }
)
)
}
})
},
getAllRanges(project_id, callback) {
if (callback == null) {
callback = function(error) {}

View File

@@ -13,6 +13,7 @@ const AuthenticationController = require('../Authentication/AuthenticationContro
const Errors = require('../Errors/Errors')
const HttpErrorHandler = require('../Errors/HttpErrorHandler')
const ProjectEntityUpdateHandler = require('../Project/ProjectEntityUpdateHandler')
const DocstoreManager = require('../Docstore/DocstoreManager')
const { expressify } = require('../../util/promises')
module.exports = {
@@ -99,6 +100,9 @@ async function _buildJoinProjectView(req, projectId, userId) {
if (project == null) {
throw new Errors.NotFoundError('project not found')
}
const deletedDocsFromDocstore = await DocstoreManager.promises.getAllDeletedDocs(
projectId
)
const members = await CollaboratorsGetter.promises.getInvitedMembersWithPrivilegeLevels(
projectId
)
@@ -127,7 +131,8 @@ async function _buildJoinProjectView(req, projectId, userId) {
project: ProjectEditorHandler.buildProjectModelView(
project,
members,
invites
invites,
deletedDocsFromDocstore
),
privilegeLevel,
isRestrictedUser

View File

@@ -15,10 +15,15 @@ let ProjectEditorHandler
const _ = require('underscore')
const Path = require('path')
function mergeDeletedDocs(a, b) {
const docIdsInA = new Set(a.map(doc => doc._id.toString()))
return a.concat(b.filter(doc => !docIdsInA.has(doc._id.toString())))
}
module.exports = ProjectEditorHandler = {
trackChangesAvailable: false,
buildProjectModelView(project, members, invites) {
buildProjectModelView(project, members, invites, deletedDocsFromDocstore) {
let owner, ownerFeatures
if (!Array.isArray(project.deletedDocs)) {
project.deletedDocs = []
@@ -38,7 +43,10 @@ module.exports = ProjectEditorHandler = {
description: project.description,
spellCheckLanguage: project.spellCheckLanguage,
deletedByExternalDataSource: project.deletedByExternalDataSource || false,
deletedDocs: project.deletedDocs,
deletedDocs: mergeDeletedDocs(
project.deletedDocs,
deletedDocsFromDocstore
),
members: [],
invites,
tokens: project.tokens,