DocstoreManager.coffee 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. request = require("request").defaults(jar: false)
  2. logger = require "logger-sharelatex"
  3. settings = require "settings-sharelatex"
  4. module.exports = DocstoreManager =
  5. deleteDoc: (project_id, doc_id, callback = (error) ->) ->
  6. logger.log project_id: project_id, doc_id: doc_id, "deleting doc in docstore api"
  7. url = "#{settings.apis.docstore.url}/project/#{project_id}/doc/#{doc_id}"
  8. request.del url, (error, res, body) ->
  9. return callback(error) if error?
  10. if 200 <= res.statusCode < 300
  11. callback(null)
  12. else
  13. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  14. logger.error err: error, project_id: project_id, doc_id: doc_id, "error deleting doc in docstore"
  15. callback(error)
  16. getAllDocs: (project_id, callback = (error) ->) ->
  17. logger.log project_id: project_id, "getting all docs for project in docstore api"
  18. url = "#{settings.apis.docstore.url}/project/#{project_id}/doc"
  19. request.get {
  20. url: url
  21. json: true
  22. }, (error, res, docs) ->
  23. return callback(error) if error?
  24. if 200 <= res.statusCode < 300
  25. callback(null, docs)
  26. else
  27. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  28. logger.error err: error, project_id: project_id, "error getting all docs from docstore"
  29. callback(error)
  30. getDoc: (project_id, doc_id, options = {}, callback = (error, lines, rev) ->) ->
  31. if typeof(options) == "function"
  32. callback = options
  33. options = {}
  34. logger.log project_id: project_id, doc_id: doc_id, options: options, "getting doc in docstore api"
  35. url = "#{settings.apis.docstore.url}/project/#{project_id}/doc/#{doc_id}"
  36. if options.include_deleted
  37. url += "?include_deleted=true"
  38. request.get {
  39. url: url
  40. json: true
  41. }, (error, res, doc) ->
  42. return callback(error) if error?
  43. if 200 <= res.statusCode < 300
  44. logger.log doc_id: doc_id, project_id: project_id, version: doc.version, rev: doc.rev, "got doc from docstore api"
  45. callback(null, doc.lines, doc.rev)
  46. else
  47. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  48. logger.error err: error, project_id: project_id, doc_id: doc_id, "error getting doc from docstore"
  49. callback(error)
  50. updateDoc: (project_id, doc_id, lines, callback = (error, modified, rev) ->) ->
  51. logger.log project_id: project_id, doc_id: doc_id, "updating doc in docstore api"
  52. url = "#{settings.apis.docstore.url}/project/#{project_id}/doc/#{doc_id}"
  53. request.post {
  54. url: url
  55. json:
  56. lines: lines
  57. }, (error, res, result) ->
  58. return callback(error) if error?
  59. if 200 <= res.statusCode < 300
  60. logger.log project_id: project_id, doc_id: doc_id, "update doc in docstore url finished"
  61. callback(null, result.modified, result.rev)
  62. else
  63. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  64. logger.error err: error, project_id: project_id, doc_id: doc_id, "error updating doc in docstore"
  65. callback(error)