ProjectDeleter.coffee 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. tagsHandler.removeProjectFromAllTags project.owner_ref, project_id, (err)->
  31. cb() #doesn't matter if this fails or the order it happens in
  32. (cb)->
  33. project.collaberator_refs.forEach (collaberator_ref)->
  34. tagsHandler.removeProjectFromAllTags collaberator_ref, project_id, ->
  35. cb()
  36. (cb)->
  37. project.readOnly_refs.forEach (readOnly_ref)->
  38. tagsHandler.removeProjectFromAllTags readOnly_ref, project_id, ->
  39. cb()
  40. (cb)->
  41. Project.update {_id:project_id}, { $set: { archived: true }}, cb
  42. ], (err)->
  43. if err?
  44. logger.err err:err, "problem deleting project"
  45. callback(err)