mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-20 12:23:47 +00:00
Keep reference to deleted docs and delete via docstore
This commit is contained in:
parent
0c0548ea85
commit
355a5a020e
4 changed files with 103 additions and 2 deletions
|
@ -13,6 +13,7 @@ logger = require('logger-sharelatex')
|
|||
slReqIdHelper = require('soa-req-id')
|
||||
docComparitor = require('./DocLinesComparitor')
|
||||
projectUpdateHandler = require('./ProjectUpdateHandler')
|
||||
DocstoreManager = require "../Docstore/DocstoreManager"
|
||||
|
||||
module.exports = ProjectEntityHandler =
|
||||
getAllFolders: (project_id, sl_req_id, callback) ->
|
||||
|
@ -328,7 +329,13 @@ module.exports = ProjectEntityHandler =
|
|||
|
||||
unsetRootDocIfRequired (error) ->
|
||||
return callback(error) if error?
|
||||
require('../../Features/DocumentUpdater/DocumentUpdaterHandler').deleteDoc project_id, doc_id, callback
|
||||
require('../../Features/DocumentUpdater/DocumentUpdaterHandler').deleteDoc project_id, doc_id, (error) ->
|
||||
return callback(error) if error?
|
||||
ProjectEntityHandler._insertDeletedDocReference project._id, doc, (error) ->
|
||||
return callback(error) if error?
|
||||
DocstoreManager.deleteDoc project_id, doc_id, (error) ->
|
||||
return callback(error) if error?
|
||||
callback()
|
||||
|
||||
_cleanUpFile: (project, file, sl_req_id, callback = (error) ->) ->
|
||||
{callback, sl_req_id} = slReqIdHelper.getCallbackAndReqId(callback, sl_req_id)
|
||||
|
@ -366,6 +373,18 @@ module.exports = ProjectEntityHandler =
|
|||
if callback?
|
||||
callback(err)
|
||||
|
||||
_insertDeletedDocReference: (project_id, doc, callback = (error) ->) ->
|
||||
Project.update {
|
||||
_id: project_id
|
||||
}, {
|
||||
$push: {
|
||||
deletedDocs: {
|
||||
_id: doc._id
|
||||
name: doc.name
|
||||
}
|
||||
}
|
||||
}, {}, callback
|
||||
|
||||
confirmFolder = (project, folder_id, callback)->
|
||||
logger.log folder_id:folder_id, project_id:project._id, "confirming folder in project"
|
||||
if folder_id+'' == 'undefined'
|
||||
|
|
|
@ -11,6 +11,9 @@ Errors = require "../errors"
|
|||
Schema = mongoose.Schema
|
||||
ObjectId = Schema.ObjectId
|
||||
|
||||
DeletedDocSchema = new Schema
|
||||
name: String
|
||||
|
||||
ProjectSchema = new Schema
|
||||
name : {type:String, default:'new project'}
|
||||
lastUpdated : {type:Date, default: () -> new Date()}
|
||||
|
@ -27,6 +30,7 @@ ProjectSchema = new Schema
|
|||
useClsi2 : {type:Boolean, default: true}
|
||||
description : {type:String, default:''}
|
||||
archived : { type: Boolean }
|
||||
deletedDocs : [DeletedDocSchema]
|
||||
|
||||
ProjectSchema.statics.getProject = (project_or_id, fields, callback)->
|
||||
if project_or_id._id?
|
||||
|
|
|
@ -30,7 +30,7 @@ module.exports =
|
|||
# Databases
|
||||
# ---------
|
||||
mongo:
|
||||
url : 'mongodb://127.0.0.1/sharelatexTesting'
|
||||
url : 'mongodb://127.0.0.1/sharelatex'
|
||||
|
||||
redis:
|
||||
web:
|
||||
|
|
|
@ -61,6 +61,7 @@ describe 'project entity handler', ->
|
|||
'../ThirdPartyDataStore/TpdsUpdateSender':@tpdsUpdateSender
|
||||
'./ProjectLocator':@projectLocator = {}
|
||||
'../../Features/DocumentUpdater/DocumentUpdaterHandler':@documentUpdaterHandler = {}
|
||||
'../Docstore/DocstoreManager': @DocstoreManager = {}
|
||||
'logger-sharelatex':{log:->}
|
||||
'./ProjectUpdateHandler': @projectUpdater
|
||||
|
||||
|
@ -703,3 +704,80 @@ describe 'project entity handler', ->
|
|||
@ProjectEntityHandler.renameEntity @project_id, @entity_id, @entityType, @newName, =>
|
||||
@tpdsUpdateSender.moveEntity.calledWith({project_id:@project_id, startPath:@path.fileSystem, endPath:"/file/system/new.tex", project_name:@project.name, rev:4}).should.equal true
|
||||
done()
|
||||
|
||||
describe "_insertDeletedDocReference", ->
|
||||
beforeEach ->
|
||||
@doc =
|
||||
_id: ObjectId()
|
||||
name: "test.tex"
|
||||
@callback = sinon.stub()
|
||||
@ProjectModel.update = sinon.stub().callsArgWith(3)
|
||||
@ProjectEntityHandler._insertDeletedDocReference project_id, @doc, @callback
|
||||
|
||||
it "should insert the doc into deletedDocs", ->
|
||||
@ProjectModel.update
|
||||
.calledWith({
|
||||
_id: project_id
|
||||
}, {
|
||||
$push: {
|
||||
deletedDocs: {
|
||||
_id: @doc._id
|
||||
name: @doc.name
|
||||
}
|
||||
}
|
||||
})
|
||||
.should.equal true
|
||||
|
||||
it "should call the callback", ->
|
||||
@callback.called.should.equal true
|
||||
|
||||
describe "_cleanUpDoc", ->
|
||||
beforeEach ->
|
||||
@project =
|
||||
_id: ObjectId(project_id)
|
||||
@doc =
|
||||
_id: ObjectId()
|
||||
name: "test.tex"
|
||||
@ProjectEntityHandler.unsetRootDoc = sinon.stub().callsArg(1)
|
||||
@ProjectEntityHandler._insertDeletedDocReference = sinon.stub().callsArg(2)
|
||||
@documentUpdaterHandler.deleteDoc = sinon.stub().callsArg(2)
|
||||
@DocstoreManager.deleteDoc = sinon.stub().callsArg(2)
|
||||
@callback = sinon.stub()
|
||||
|
||||
describe "when the doc is the root doc", ->
|
||||
beforeEach ->
|
||||
@project.rootDoc_id = @doc._id
|
||||
@ProjectEntityHandler._cleanUpDoc @project, @doc, @callback
|
||||
|
||||
it "should unset the root doc", ->
|
||||
@ProjectEntityHandler.unsetRootDoc
|
||||
.calledWith(project_id)
|
||||
.should.equal true
|
||||
|
||||
it "should delete the doc in the doc updater", ->
|
||||
@documentUpdaterHandler.deleteDoc
|
||||
.calledWith(project_id, @doc._id.toString())
|
||||
|
||||
it "should insert the doc into the deletedDocs array", ->
|
||||
@ProjectEntityHandler._insertDeletedDocReference
|
||||
.calledWith(@project._id, @doc)
|
||||
.should.equal true
|
||||
|
||||
it "should delete the doc in the doc store", ->
|
||||
@DocstoreManager.deleteDoc
|
||||
.calledWith(project_id, @doc._id.toString())
|
||||
.should.equal true
|
||||
|
||||
it "should call the callback", ->
|
||||
@callback.called.should.equal true
|
||||
|
||||
describe "when the doc is not the root doc", ->
|
||||
beforeEach ->
|
||||
@project.rootDoc_id = ObjectId()
|
||||
@ProjectEntityHandler._cleanUpDoc @project, @doc, @callback
|
||||
|
||||
it "should not unset the root doc", ->
|
||||
@ProjectEntityHandler.unsetRootDoc.called.should.equal false
|
||||
|
||||
it "should call the callback", ->
|
||||
@callback.called.should.equal true
|
Loading…
Add table
Reference in a new issue