ProjectDeleter.coffee 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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, (err)->
  37. cb() #doesn't matter if this fails or the order it happens in
  38. (cb)->
  39. project.collaberator_refs.forEach (collaberator_ref)->
  40. tagsHandler.removeProjectFromAllTags collaberator_ref, project_id, ->
  41. cb()
  42. (cb)->
  43. project.readOnly_refs.forEach (readOnly_ref)->
  44. tagsHandler.removeProjectFromAllTags readOnly_ref, project_id, ->
  45. cb()
  46. (cb)->
  47. Project.remove {_id:project_id}, cb
  48. ], (err)->
  49. if err?
  50. logger.err err:err, "problem deleting project"
  51. callback(err)