Quellcode durchsuchen

[web] deletedDocs are not needed for joinProject anymore (#25654)

* [web] deletedDocs are not needed for joinProject anymore

* [web] cleanup unit tests

GitOrigin-RevId: 91c9bc60ec776757b3031cbc85c67ae1bf4adf4d
Jakob Ackermann vor 1 Jahr
Ursprung
Commit
14cbd44d9b

+ 1 - 18
services/web/app/src/Features/Editor/EditorHttpController.js

@@ -10,8 +10,6 @@ const CollaboratorsHandler = require('../Collaborators/CollaboratorsHandler')
 const PrivilegeLevels = require('../Authorization/PrivilegeLevels')
 const SessionManager = require('../Authentication/SessionManager')
 const Errors = require('../Errors/Errors')
-const DocstoreManager = require('../Docstore/DocstoreManager')
-const logger = require('@overleaf/logger')
 const { expressify } = require('@overleaf/promise-utils')
 const Settings = require('@overleaf/settings')
 
@@ -77,20 +75,6 @@ async function _buildJoinProjectView(req, projectId, userId) {
   if (project == null) {
     throw new Errors.NotFoundError('project not found')
   }
-  let deletedDocsFromDocstore = []
-  try {
-    deletedDocsFromDocstore =
-      await DocstoreManager.promises.getAllDeletedDocs(projectId)
-  } catch (err) {
-    // The query in docstore is not optimized at this time and fails for
-    // projects with many very large, deleted documents.
-    // Not serving the user with deletedDocs from docstore may cause a minor
-    //  UI issue with deleted files that are no longer available for restore.
-    logger.warn(
-      { err, projectId },
-      'soft-failure when fetching deletedDocs from docstore'
-    )
-  }
   const members =
     await CollaboratorsGetter.promises.getInvitedMembersWithPrivilegeLevels(
       projectId
@@ -126,8 +110,7 @@ async function _buildJoinProjectView(req, projectId, userId) {
     project: ProjectEditorHandler.buildProjectModelView(
       project,
       members,
-      invites,
-      deletedDocsFromDocstore
+      invites
     ),
     privilegeLevel,
     isTokenMember,

+ 1 - 17
services/web/app/src/Features/Project/ProjectEditorHandler.js

@@ -3,23 +3,11 @@ const _ = require('lodash')
 const Path = require('path')
 const Features = require('../../infrastructure/Features')
 
-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, deletedDocsFromDocstore) {
+  buildProjectModelView(project, members, invites) {
     let owner, ownerFeatures
-    if (!Array.isArray(project.deletedDocs)) {
-      project.deletedDocs = []
-    }
-    project.deletedDocs.forEach(doc => {
-      // The frontend does not use this field.
-      delete doc.deletedAt
-    })
     const result = {
       _id: project._id,
       name: project.name,
@@ -32,10 +20,6 @@ module.exports = ProjectEditorHandler = {
       description: project.description,
       spellCheckLanguage: project.spellCheckLanguage,
       deletedByExternalDataSource: project.deletedByExternalDataSource || false,
-      deletedDocs: mergeDeletedDocs(
-        project.deletedDocs,
-        deletedDocsFromDocstore
-      ),
       members: [],
       invites: this.buildInvitesView(invites),
       imageName:

+ 2 - 31
services/web/test/acceptance/src/EditorHttpControllerTests.mjs

@@ -14,43 +14,14 @@ describe('EditorHttpController', function () {
       done()
     })
   })
-  beforeEach('create doc', function (done) {
-    this.user.createDocInProject(
-      this.projectId,
-      null,
-      'potato.tex',
-      (error, docId) => {
-        this.docId = docId
-        done(error)
-      }
-    )
-  })
-
   describe('joinProject', function () {
-    it('should emit an empty deletedDocs array', function (done) {
+    it('returns project details', function (done) {
       this.user.joinProject(this.projectId, (error, details) => {
         if (error) return done(error)
 
-        expect(details.project.deletedDocs).to.deep.equal([])
+        expect(details.project.name).to.equal(this.projectName)
         done()
       })
     })
-
-    describe('after deleting a doc', function () {
-      beforeEach(function (done) {
-        this.user.deleteItemInProject(this.projectId, 'doc', this.docId, done)
-      })
-
-      it('should include the deleted doc in the deletedDocs array', function (done) {
-        this.user.joinProject(this.projectId, (error, details) => {
-          if (error) return done(error)
-
-          expect(details.project.deletedDocs).to.deep.equal([
-            { _id: this.docId, name: 'potato.tex' },
-          ])
-          done()
-        })
-      })
-    })
   })
 })

+ 1 - 50
services/web/test/unit/src/Project/ProjectEditorHandlerTests.js

@@ -42,13 +42,6 @@ describe('ProjectEditorHandler', function () {
           ],
         },
       ],
-      deletedDocs: [
-        {
-          _id: 'deleted-doc-id',
-          name: 'main.tex',
-          deletedAt: (this.deletedAt = new Date('2017-01-01')),
-        },
-      ],
     }
     this.members = [
       {
@@ -95,9 +88,6 @@ describe('ProjectEditorHandler', function () {
         token: 'my-secret-token2',
       },
     ]
-    this.deletedDocsFromDocstore = [
-      { _id: 'deleted-doc-id-from-docstore', name: 'docstore.tex' },
-    ]
     this.handler = SandboxedModule.require(modulePath)
   })
 
@@ -107,8 +97,7 @@ describe('ProjectEditorHandler', function () {
         this.result = this.handler.buildProjectModelView(
           this.project,
           this.members,
-          this.invites,
-          this.deletedDocsFromDocstore
+          this.invites
         )
       })
 
@@ -141,18 +130,6 @@ describe('ProjectEditorHandler', function () {
         this.result.owner.privileges.should.equal('owner')
       })
 
-      it('should include the deletedDocs', function () {
-        expect(this.result.deletedDocs).to.exist
-        this.result.deletedDocs.should.deep.equal([
-          {
-            // omit deletedAt field
-            _id: this.project.deletedDocs[0]._id,
-            name: this.project.deletedDocs[0].name,
-          },
-          this.deletedDocsFromDocstore[0],
-        ])
-      })
-
       it('should gather readOnly_refs and collaberators_refs into a list of members', function () {
         const findMember = id => {
           for (const member of this.result.members) {
@@ -231,33 +208,12 @@ describe('ProjectEditorHandler', function () {
       })
     })
 
-    describe('when docstore sends a deleted doc that is also present in the project', function () {
-      beforeEach(function () {
-        this.deletedDocsFromDocstore.push(this.project.deletedDocs[0])
-        this.result = this.handler.buildProjectModelView(
-          this.project,
-          this.members,
-          this.invites,
-          this.deletedDocsFromDocstore
-        )
-      })
-
-      it('should not send any duplicate', function () {
-        expect(this.result.deletedDocs).to.exist
-        this.result.deletedDocs.should.deep.equal([
-          this.project.deletedDocs[0],
-          this.deletedDocsFromDocstore[0],
-        ])
-      })
-    })
-
     describe('deletedByExternalDataSource', function () {
       it('should set the deletedByExternalDataSource flag to false when it is not there', function () {
         delete this.project.deletedByExternalDataSource
         const result = this.handler.buildProjectModelView(
           this.project,
           this.members,
-          [],
           []
         )
         result.deletedByExternalDataSource.should.equal(false)
@@ -267,7 +223,6 @@ describe('ProjectEditorHandler', function () {
         const result = this.handler.buildProjectModelView(
           this.project,
           this.members,
-          [],
           []
         )
         result.deletedByExternalDataSource.should.equal(false)
@@ -278,7 +233,6 @@ describe('ProjectEditorHandler', function () {
         const result = this.handler.buildProjectModelView(
           this.project,
           this.members,
-          [],
           []
         )
         result.deletedByExternalDataSource.should.equal(true)
@@ -296,7 +250,6 @@ describe('ProjectEditorHandler', function () {
         this.result = this.handler.buildProjectModelView(
           this.project,
           this.members,
-          [],
           []
         )
       })
@@ -326,7 +279,6 @@ describe('ProjectEditorHandler', function () {
           this.result = this.handler.buildProjectModelView(
             this.project,
             this.members,
-            [],
             []
           )
         })
@@ -351,7 +303,6 @@ describe('ProjectEditorHandler', function () {
               this.result = this.handler.buildProjectModelView(
                 this.project,
                 this.members,
-                [],
                 []
               )
             })