Explorar o código

Mark projects as archived, but don't actually delete them

James Allen %!s(int64=12) %!d(string=hai) anos
pai
achega
d528ac21a3

+ 1 - 7
services/web/app/coffee/Features/Project/ProjectDeleter.coffee

@@ -32,12 +32,6 @@ module.exports =
 				async.series [
 				async.series [
 					(cb)->
 					(cb)->
 						documentUpdaterHandler.flushProjectToMongoAndDelete project_id, cb
 						documentUpdaterHandler.flushProjectToMongoAndDelete project_id, cb
-					(cb)->
-						Project.applyToAllFilesRecursivly project.rootFolder[0], (file)=>
-							FileStoreHandler.deleteFile project_id, file._id, ->
-						cb()
-					(cb)->
-						AutomaticSnapshotManager.unmarkProjectAsUpdated project_id, cb
 					(cb)->
 					(cb)->
 						tagsHandler.removeProjectFromAllTags project.owner_ref, project_id, (err)->
 						tagsHandler.removeProjectFromAllTags project.owner_ref, project_id, (err)->
 						cb() #doesn't matter if this fails or the order it happens in
 						cb() #doesn't matter if this fails or the order it happens in
@@ -50,7 +44,7 @@ module.exports =
 							tagsHandler.removeProjectFromAllTags readOnly_ref, project_id, ->
 							tagsHandler.removeProjectFromAllTags readOnly_ref, project_id, ->
 						cb()
 						cb()
 					(cb)->
 					(cb)->
-						Project.remove {_id:project_id}, cb
+						Project.update {_id:project_id}, { $set: { archived: true }}, cb
 				], (err)->
 				], (err)->
 					if err?
 					if err?
 						logger.err err:err, "problem deleting project"
 						logger.err err:err, "problem deleting project"

+ 2 - 2
services/web/app/coffee/managers/SecurityManager.coffee

@@ -28,7 +28,7 @@ module.exports =
 	requestCanAccessProject : (req, res, next)->
 	requestCanAccessProject : (req, res, next)->
 		doRequest = (req, res, next) ->
 		doRequest = (req, res, next) ->
 			getRequestUserAndProject req, res, {allow_auth_token: options?.allow_auth_token}, (err, user, project)->
 			getRequestUserAndProject req, res, {allow_auth_token: options?.allow_auth_token}, (err, user, project)->
-				if !project?
+				if !project? or project.archived
 					return HomeController.notFound(req, res, next)
 					return HomeController.notFound(req, res, next)
 				userCanAccessProject user, project, (canAccess, permissionLevel)->
 				userCanAccessProject user, project, (canAccess, permissionLevel)->
 					if canAccess
 					if canAccess
@@ -156,7 +156,7 @@ module.exports =
 
 
 getRequestUserAndProject = (req, res, options, callback)->
 getRequestUserAndProject = (req, res, options, callback)->
 	project_id = req.params.Project_id
 	project_id = req.params.Project_id
-	Project.findById project_id, 'name owner_ref readOnly_refs collaberator_refs publicAccesLevel', (err, project)=>
+	Project.findById project_id, 'name owner_ref readOnly_refs collaberator_refs publicAccesLevel archived', (err, project)=>
 		if err?
 		if err?
 			logger.err err:err, "error getting project for security check"
 			logger.err err:err, "error getting project for security check"
 			return callback err
 			return callback err

+ 4 - 3
services/web/app/coffee/models/Project.coffee

@@ -26,6 +26,7 @@ ProjectSchema = new Schema
 	deletedByExternalDataSource : {type: Boolean, default: false}
 	deletedByExternalDataSource : {type: Boolean, default: false}
 	useClsi2          :   {type:Boolean, default: true}
 	useClsi2          :   {type:Boolean, default: true}
 	description : {type:String, default:''}
 	description : {type:String, default:''}
+	archived          : { type: Boolean }
 
 
 ProjectSchema.statics.getProject = (project_or_id, fields, callback)->
 ProjectSchema.statics.getProject = (project_or_id, fields, callback)->
 	if project_or_id._id?
 	if project_or_id._id?
@@ -53,9 +54,9 @@ ProjectSchema.statics.findPopulatedById = (project_id, callback)->
 					callback(null, projects[0])
 					callback(null, projects[0])
 
 
 ProjectSchema.statics.findAllUsersProjects = (user_id, requiredFields, callback)->
 ProjectSchema.statics.findAllUsersProjects = (user_id, requiredFields, callback)->
-	this.find {owner_ref:user_id}, requiredFields, (err, projects)=>
-		this.find {collaberator_refs:user_id}, requiredFields, (err, collabertions)=>
-			this.find {readOnly_refs:user_id}, requiredFields, (err, readOnlyProjects)=>
+	this.find {owner_ref:user_id, archived: { $exists: false }}, requiredFields, (err, projects)=>
+		this.find {collaberator_refs:user_id, archived: { $exists: false }}, requiredFields, (err, collabertions)=>
+			this.find {readOnly_refs:user_id, archived: { $exists: false }}, requiredFields, (err, readOnlyProjects)=>
 				callback(err, projects, collabertions, readOnlyProjects)
 				callback(err, projects, collabertions, readOnlyProjects)
 
 
 sanitizeTypeOfElement = (elementType)->
 sanitizeTypeOfElement = (elementType)->

+ 6 - 2
services/web/test/UnitTests/coffee/Project/ProjectDeleterTests.coffee

@@ -61,7 +61,7 @@ describe 'Project deleter', ->
 
 
 	describe "deleteProject", ->
 	describe "deleteProject", ->
 		beforeEach ->
 		beforeEach ->
-			@Project.remove.callsArgWith(1)
+			@Project.update.callsArgWith(2)
 
 
 		it "should flushProjectToMongoAndDelete in doc updater", (done)->
 		it "should flushProjectToMongoAndDelete in doc updater", (done)->
 			@deleter.deleteProject @project_id, =>
 			@deleter.deleteProject @project_id, =>
@@ -70,7 +70,11 @@ describe 'Project deleter', ->
 
 
 		it "should remove the project", (done)->
 		it "should remove the project", (done)->
 			@deleter.deleteProject @project_id, =>
 			@deleter.deleteProject @project_id, =>
-				@Project.remove.calledWith(_id:@project_id).should.equal true
+				@Project.update.calledWith({
+					_id:@project_id
+				}, {
+					$set: { archived: true }
+				}).should.equal true
 				done()
 				done()
 
 
 		it "should removeProjectFromAllTags", (done)->
 		it "should removeProjectFromAllTags", (done)->