DocstoreManager.coffee 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. request = require("request").defaults(jar: false)
  2. logger = require "logger-sharelatex"
  3. settings = require "settings-sharelatex"
  4. Errors = require "../Errors/Errors"
  5. module.exports = DocstoreManager =
  6. deleteDoc: (project_id, doc_id, callback = (error) ->) ->
  7. logger.log project_id: project_id, doc_id: doc_id, "deleting doc in docstore api"
  8. url = "#{settings.apis.docstore.url}/project/#{project_id}/doc/#{doc_id}"
  9. request.del url, (error, res, body) ->
  10. return callback(error) if error?
  11. if 200 <= res.statusCode < 300
  12. callback(null)
  13. else if res.statusCode is 404
  14. error = new Errors.NotFoundError("tried to delete doc not in docstore")
  15. logger.error err: error, project_id: project_id, doc_id: doc_id, "tried to delete doc not in docstore"
  16. callback(error) # maybe suppress the error when delete doc which is not present?
  17. else
  18. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  19. logger.error err: error, project_id: project_id, doc_id: doc_id, "error deleting doc in docstore"
  20. callback(error)
  21. getAllDocs: (project_id, callback = (error) ->) ->
  22. logger.log project_id: project_id, "getting all docs for project in docstore api"
  23. url = "#{settings.apis.docstore.url}/project/#{project_id}/doc"
  24. request.get {
  25. url: url
  26. json: true
  27. }, (error, res, docs) ->
  28. return callback(error) if error?
  29. if 200 <= res.statusCode < 300
  30. callback(null, docs)
  31. else
  32. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  33. logger.error err: error, project_id: project_id, "error getting all docs from docstore"
  34. callback(error)
  35. getAllRanges: (project_id, callback = (error) ->) ->
  36. logger.log { project_id }, "getting all doc ranges for project in docstore api"
  37. url = "#{settings.apis.docstore.url}/project/#{project_id}/ranges"
  38. request.get {
  39. url: url
  40. json: true
  41. }, (error, res, docs) ->
  42. return callback(error) if error?
  43. if 200 <= res.statusCode < 300
  44. callback(null, docs)
  45. else
  46. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  47. logger.error err: error, project_id: project_id, "error getting all doc ranges from docstore"
  48. callback(error)
  49. getDoc: (project_id, doc_id, options = {}, callback = (error, lines, rev, version) ->) ->
  50. if typeof(options) == "function"
  51. callback = options
  52. options = {}
  53. logger.log project_id: project_id, doc_id: doc_id, options: options, "getting doc in docstore api"
  54. url = "#{settings.apis.docstore.url}/project/#{project_id}/doc/#{doc_id}"
  55. if options.include_deleted
  56. url += "?include_deleted=true"
  57. request.get {
  58. url: url
  59. json: true
  60. }, (error, res, doc) ->
  61. return callback(error) if error?
  62. if 200 <= res.statusCode < 300
  63. logger.log doc_id: doc_id, project_id: project_id, version: doc.version, rev: doc.rev, "got doc from docstore api"
  64. callback(null, doc.lines, doc.rev, doc.version, doc.ranges)
  65. else if res.statusCode is 404
  66. error = new Errors.NotFoundError("doc not found in docstore")
  67. logger.error err: error, project_id: project_id, doc_id: doc_id, "doc not found in docstore"
  68. callback(error)
  69. else
  70. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  71. logger.error err: error, project_id: project_id, doc_id: doc_id, "error getting doc from docstore"
  72. callback(error)
  73. updateDoc: (project_id, doc_id, lines, version, ranges, callback = (error, modified, rev) ->) ->
  74. logger.log project_id: project_id, doc_id: doc_id, "updating doc in docstore api"
  75. url = "#{settings.apis.docstore.url}/project/#{project_id}/doc/#{doc_id}"
  76. request.post {
  77. url: url
  78. json:
  79. lines: lines
  80. version: version
  81. ranges: ranges
  82. }, (error, res, result) ->
  83. return callback(error) if error?
  84. if 200 <= res.statusCode < 300
  85. logger.log project_id: project_id, doc_id: doc_id, "update doc in docstore url finished"
  86. callback(null, result.modified, result.rev)
  87. else
  88. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  89. logger.error err: error, project_id: project_id, doc_id: doc_id, "error updating doc in docstore"
  90. callback(error)
  91. archiveProject: (project_id, callback)->
  92. url = "#{settings.apis.docstore.url}/project/#{project_id}/archive"
  93. logger.log project_id:project_id, "archiving project in docstore"
  94. request.post url, (err, res, docs) ->
  95. if err?
  96. logger.err err:err, project_id:project_id, "error archving project in docstore"
  97. return callback(err)
  98. if 200 <= res.statusCode < 300
  99. callback()
  100. else
  101. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  102. logger.err err: error, project_id: project_id, "error archiving project in docstore"
  103. return callback(error)
  104. unarchiveProject: (project_id, callback)->
  105. url = "#{settings.apis.docstore.url}/project/#{project_id}/unarchive"
  106. logger.log project_id:project_id, "unarchiving project in docstore"
  107. request.post url, (err, res, docs) ->
  108. if err?
  109. logger.err err:err, project_id:project_id, "error unarchiving project in docstore"
  110. return callback(err)
  111. if 200 <= res.statusCode < 300
  112. callback()
  113. else
  114. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  115. logger.err err: error, project_id: project_id, "error unarchiving project in docstore"
  116. return callback(error)