ProjectDeleter.coffee 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. Project = require('../../models/Project').Project
  2. logger = require('logger-sharelatex')
  3. documentUpdaterHandler = require('../DocumentUpdater/DocumentUpdaterHandler')
  4. tagsHandler = require("../Tags/TagsHandler")
  5. async = require("async")
  6. AutomaticSnapshotManager = require('../Versioning/AutomaticSnapshotManager')
  7. FileStoreHandler = require("../FileStore/FileStoreHandler")
  8. module.exports =
  9. markAsDeletedByExternalSource : (project_id, callback)->
  10. logger.log project_id:project_id, "marking project as deleted by external data source"
  11. conditions = {_id:project_id}
  12. update = {deletedByExternalDataSource:true}
  13. Project.update conditions, update, {}, (err)->
  14. require('../Editor/EditorController').notifyUsersProjectHasBeenDeletedOrRenamed project_id, ->
  15. callback()
  16. deleteUsersProjects: (owner_id, callback)->
  17. logger.log owner_id:owner_id, "deleting users projects"
  18. Project.remove owner_ref:owner_id, callback
  19. deleteProject: (project_id, callback = (error) ->)->
  20. logger.log project_id:project_id, "deleting project"
  21. Project.findById project_id, (err, project)=>
  22. if err? or !project?
  23. logger.err err:err, project_id:project_id, "error getting project to delete it"
  24. callback(err)
  25. else
  26. async.series [
  27. (cb)->
  28. documentUpdaterHandler.flushProjectToMongoAndDelete project_id, cb
  29. (cb)->
  30. Project.applyToAllFilesRecursivly project.rootFolder[0], (file)=>
  31. FileStoreHandler.deleteFile project_id, file._id, ->
  32. cb()
  33. (cb)->
  34. AutomaticSnapshotManager.unmarkProjectAsUpdated project_id, cb
  35. (cb)->
  36. tagsHandler.removeProjectFromAllTags project.owner_ref, project_id, cb
  37. (cb)->
  38. project.collaberator_refs.forEach (collaberator_ref)->
  39. tagsHandler.removeProjectFromAllTags collaberator_ref, project_id, ->
  40. cb()
  41. (cb)->
  42. project.readOnly_refs.forEach (readOnly_ref)->
  43. tagsHandler.removeProjectFromAllTags readOnly_ref, project_id, ->
  44. cb()
  45. (cb)->
  46. Project.remove {_id:project_id}, cb
  47. ], callback