DocstoreManager.coffee 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. getAllRanges: (project_id, callback = (error) ->) ->
  31. logger.log { project_id }, "getting all doc ranges for project in docstore api"
  32. url = "#{settings.apis.docstore.url}/project/#{project_id}/ranges"
  33. request.get {
  34. url: url
  35. json: true
  36. }, (error, res, docs) ->
  37. return callback(error) if error?
  38. if 200 <= res.statusCode < 300
  39. callback(null, docs)
  40. else
  41. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  42. logger.error err: error, project_id: project_id, "error getting all doc ranges from docstore"
  43. callback(error)
  44. getDoc: (project_id, doc_id, options = {}, callback = (error, lines, rev, version) ->) ->
  45. if typeof(options) == "function"
  46. callback = options
  47. options = {}
  48. logger.log project_id: project_id, doc_id: doc_id, options: options, "getting doc in docstore api"
  49. url = "#{settings.apis.docstore.url}/project/#{project_id}/doc/#{doc_id}"
  50. if options.include_deleted
  51. url += "?include_deleted=true"
  52. request.get {
  53. url: url
  54. json: true
  55. }, (error, res, doc) ->
  56. return callback(error) if error?
  57. if 200 <= res.statusCode < 300
  58. logger.log doc_id: doc_id, project_id: project_id, version: doc.version, rev: doc.rev, "got doc from docstore api"
  59. callback(null, doc.lines, doc.rev, doc.version, doc.ranges)
  60. else
  61. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  62. logger.error err: error, project_id: project_id, doc_id: doc_id, "error getting doc from docstore"
  63. callback(error)
  64. updateDoc: (project_id, doc_id, lines, version, ranges, callback = (error, modified, rev) ->) ->
  65. logger.log project_id: project_id, doc_id: doc_id, "updating doc in docstore api"
  66. url = "#{settings.apis.docstore.url}/project/#{project_id}/doc/#{doc_id}"
  67. request.post {
  68. url: url
  69. json:
  70. lines: lines
  71. version: version
  72. ranges: ranges
  73. }, (error, res, result) ->
  74. return callback(error) if error?
  75. if 200 <= res.statusCode < 300
  76. logger.log project_id: project_id, doc_id: doc_id, "update doc in docstore url finished"
  77. callback(null, result.modified, result.rev)
  78. else
  79. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  80. logger.error err: error, project_id: project_id, doc_id: doc_id, "error updating doc in docstore"
  81. callback(error)
  82. archiveProject: (project_id, callback)->
  83. url = "#{settings.apis.docstore.url}/project/#{project_id}/archive"
  84. logger.log project_id:project_id, "archiving project in docstore"
  85. request.post url, (err, res, docs) ->
  86. if err?
  87. logger.err err:err, project_id:project_id, "error archving project in docstore"
  88. return callback(err)
  89. if 200 <= res.statusCode < 300
  90. callback()
  91. else
  92. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  93. logger.err err: error, project_id: project_id, "error archiving project in docstore"
  94. return callback(error)
  95. unarchiveProject: (project_id, callback)->
  96. url = "#{settings.apis.docstore.url}/project/#{project_id}/unarchive"
  97. logger.log project_id:project_id, "unarchiving project in docstore"
  98. request.post url, (err, res, docs) ->
  99. if err?
  100. logger.err err:err, project_id:project_id, "error unarchiving project in docstore"
  101. return callback(err)
  102. if 200 <= res.statusCode < 300
  103. callback()
  104. else
  105. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  106. logger.err err: error, project_id: project_id, "error unarchiving project in docstore"
  107. return callback(error)