HttpController.coffee 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. DocumentManager = require "./DocumentManager"
  2. ProjectManager = require "./ProjectManager"
  3. Errors = require "./Errors"
  4. logger = require "logger-sharelatex"
  5. Metrics = require "./Metrics"
  6. module.exports = HttpController =
  7. getDoc: (req, res, next = (error) ->) ->
  8. doc_id = req.params.doc_id
  9. project_id = req.params.project_id
  10. logger.log project_id: project_id, doc_id: doc_id, "getting doc via http"
  11. timer = new Metrics.Timer("http.getDoc")
  12. if req.query?.fromVersion?
  13. fromVersion = parseInt(req.query.fromVersion, 10)
  14. else
  15. fromVersion = -1
  16. DocumentManager.getDocAndRecentOpsWithLock project_id, doc_id, fromVersion, (error, lines, version, ops) ->
  17. timer.done()
  18. return next(error) if error?
  19. logger.log project_id: project_id, doc_id: doc_id, "got doc via http"
  20. if !lines? or !version?
  21. return next(new Errors.NotFoundError("document not found"))
  22. res.send JSON.stringify
  23. id: doc_id
  24. lines: lines
  25. version: version
  26. ops: ops
  27. setDoc: (req, res, next = (error) ->) ->
  28. doc_id = req.params.doc_id
  29. project_id = req.params.project_id
  30. lines = req.body.lines
  31. logger.log project_id: project_id, doc_id: doc_id, lines: lines, "setting doc via http"
  32. timer = new Metrics.Timer("http.setDoc")
  33. DocumentManager.setDocWithLock project_id, doc_id, lines, (error) ->
  34. timer.done()
  35. return next(error) if error?
  36. logger.log project_id: project_id, doc_id: doc_id, "set doc via http"
  37. res.send 204 # No Content
  38. flushDocIfLoaded: (req, res, next = (error) ->) ->
  39. doc_id = req.params.doc_id
  40. project_id = req.params.project_id
  41. logger.log project_id: project_id, doc_id: doc_id, "flushing doc via http"
  42. timer = new Metrics.Timer("http.flushDoc")
  43. DocumentManager.flushDocIfLoadedWithLock project_id, doc_id, (error) ->
  44. timer.done()
  45. return next(error) if error?
  46. logger.log project_id: project_id, doc_id: doc_id, "flushed doc via http"
  47. res.send 204 # No Content
  48. flushAndDeleteDoc: (req, res, next = (error) ->) ->
  49. doc_id = req.params.doc_id
  50. project_id = req.params.project_id
  51. logger.log project_id: project_id, doc_id: doc_id, "deleting doc via http"
  52. timer = new Metrics.Timer("http.deleteDoc")
  53. DocumentManager.flushAndDeleteDocWithLock project_id, doc_id, (error) ->
  54. timer.done()
  55. return next(error) if error?
  56. logger.log project_id: project_id, doc_id: doc_id, "deleted doc via http"
  57. res.send 204 # No Content
  58. flushProject: (req, res, next = (error) ->) ->
  59. project_id = req.params.project_id
  60. logger.log project_id: project_id, "flushing project via http"
  61. timer = new Metrics.Timer("http.flushProject")
  62. ProjectManager.flushProjectWithLocks project_id, (error) ->
  63. timer.done()
  64. return next(error) if error?
  65. logger.log project_id: project_id, "flushed project via http"
  66. res.send 204 # No Content
  67. deleteProject: (req, res, next = (error) ->) ->
  68. project_id = req.params.project_id
  69. logger.log project_id: project_id, "deleting project via http"
  70. timer = new Metrics.Timer("http.deleteProject")
  71. ProjectManager.flushAndDeleteProjectWithLocks project_id, (error) ->
  72. timer.done()
  73. return next(error) if error?
  74. logger.log project_id: project_id, "deleted project via http"
  75. res.send 204 # No Content