HttpController.coffee 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. DocManager = require "./DocManager"
  2. logger = require "logger-sharelatex"
  3. module.exports = HttpController =
  4. getDoc: (req, res, next = (error) ->) ->
  5. project_id = req.params.project_id
  6. doc_id = req.params.doc_id
  7. logger.log project_id: project_id, doc_id: doc_id, "getting doc"
  8. DocManager.getDoc project_id, doc_id, (error, doc) ->
  9. return next(error) if error?
  10. logger.log doc: doc, "got doc"
  11. if !doc?
  12. res.send 404
  13. else
  14. res.json HttpController._buildDocView(doc)
  15. getRawDoc: (req, res, next = (error)->)->
  16. project_id = req.params.project_id
  17. doc_id = req.params.doc_id
  18. logger.log project_id: project_id, doc_id: doc_id, "getting raw doc"
  19. DocManager.getDoc project_id, doc_id, (error, doc) ->
  20. return next(error) if error?
  21. if !doc?
  22. res.send 404
  23. else
  24. res.setHeader('content-type', 'text/plain')
  25. res.send HttpController._buildRawDocView(doc)
  26. getAllDocs: (req, res, next = (error) ->) ->
  27. project_id = req.params.project_id
  28. logger.log project_id: project_id, "getting all docs"
  29. DocManager.getAllDocs project_id, (error, docs = []) ->
  30. return next(error) if error?
  31. docViews = []
  32. for doc in docs
  33. if doc? # There can end up being null docs for some reason :( (probably a race condition)
  34. docViews.push HttpController._buildDocView(doc)
  35. else
  36. logger.error err: new Error("null doc"), project_id: project_id, "encountered null doc"
  37. res.json docViews
  38. updateDoc: (req, res, next = (error) ->) ->
  39. project_id = req.params.project_id
  40. doc_id = req.params.doc_id
  41. lines = req.body?.lines
  42. if !lines? or lines not instanceof Array
  43. logger.error project_id: project_id, doc_id: doc_id, "no doc lines provided"
  44. res.send 400 # Bad Request
  45. return
  46. logger.log project_id: project_id, doc_id: doc_id, "got http request to update doc"
  47. DocManager.updateDoc project_id, doc_id, lines, (error, modified, rev) ->
  48. return next(error) if error?
  49. res.json {
  50. modified: modified
  51. rev: rev
  52. }
  53. deleteDoc: (req, res, next = (error) ->) ->
  54. project_id = req.params.project_id
  55. doc_id = req.params.doc_id
  56. logger.log project_id: project_id, doc_id: doc_id, "deleting doc"
  57. DocManager.deleteDoc project_id, doc_id, (error) ->
  58. return next(error) if error?
  59. res.send 204
  60. _buildDocView: (doc) ->
  61. return {
  62. _id: doc._id?.toString()
  63. lines: doc.lines
  64. rev: doc.rev
  65. deleted: !!doc.deleted
  66. }
  67. _buildRawDocView: (doc)->
  68. return (doc?.lines or []).join("\n")