ProjectPersistenceManager.coffee 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. UrlCache = require "./UrlCache"
  2. CompileManager = require "./CompileManager"
  3. db = require "./db"
  4. async = require "async"
  5. logger = require "logger-sharelatex"
  6. module.exports = ProjectPersistenceManager =
  7. EXPIRY_TIMEOUT: oneDay = 24 * 60 * 60 * 1000 #ms
  8. markProjectAsJustAccessed: (project_id, callback = (error) ->) ->
  9. db.Project.findOrCreate(where: {project_id: project_id})
  10. .spread(
  11. (project, created) ->
  12. project.updateAttributes(lastAccessed: new Date())
  13. .then(() -> callback())
  14. .error callback
  15. )
  16. .error callback
  17. clearExpiredProjects: (callback = (error) ->) ->
  18. ProjectPersistenceManager._findExpiredProjectIds (error, project_ids) ->
  19. return callback(error) if error?
  20. logger.log project_ids: project_ids, "clearing expired projects"
  21. jobs = for project_id in (project_ids or [])
  22. do (project_id) ->
  23. (callback) ->
  24. ProjectPersistenceManager.clearProject project_id, (err) ->
  25. if err?
  26. logger.error err: err, project_id: project_id, "error clearing project"
  27. callback()
  28. async.series jobs, callback
  29. clearProject: (project_id, callback = (error) ->) ->
  30. logger.log project_id: project_id, "clearing project"
  31. CompileManager.clearProject project_id, (error) ->
  32. return callback(error) if error?
  33. UrlCache.clearProject project_id, (error) ->
  34. return callback(error) if error?
  35. ProjectPersistenceManager._clearProjectFromDatabase project_id, (error) ->
  36. return callback(error) if error?
  37. callback()
  38. _clearProjectFromDatabase: (project_id, callback = (error) ->) ->
  39. db.Project.destroy(where: {project_id: project_id})
  40. .then(() -> callback())
  41. .error callback
  42. _findExpiredProjectIds: (callback = (error, project_ids) ->) ->
  43. db.Project.findAll(where: ["lastAccessed < ?", new Date(Date.now() - ProjectPersistenceManager.EXPIRY_TIMEOUT)])
  44. .then((projects) ->
  45. callback null, projects.map((project) -> project.project_id)
  46. ).error callback