DocstoreManager.coffee 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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, version) ->) ->
  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, doc.version)
  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, version, 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. version: version
  58. }, (error, res, result) ->
  59. return callback(error) if error?
  60. if 200 <= res.statusCode < 300
  61. logger.log project_id: project_id, doc_id: doc_id, "update doc in docstore url finished"
  62. callback(null, result.modified, result.rev)
  63. else
  64. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  65. logger.error err: error, project_id: project_id, doc_id: doc_id, "error updating doc in docstore"
  66. callback(error)
  67. archiveProject: (project_id, callback)->
  68. url = "#{settings.apis.docstore.url}/project/#{project_id}/archive"
  69. logger.log project_id:project_id, "archiving project in docstore"
  70. request.post url, (err, res, docs) ->
  71. if err?
  72. logger.err err:err, project_id:project_id, "error archving project in docstore"
  73. return callback(err)
  74. if 200 <= res.statusCode < 300
  75. callback()
  76. else
  77. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  78. logger.err err: error, project_id: project_id, "error archiving project in docstore"
  79. return callback(error)
  80. unarchiveProject: (project_id, callback)->
  81. url = "#{settings.apis.docstore.url}/project/#{project_id}/unarchive"
  82. logger.log project_id:project_id, "unarchiving project in docstore"
  83. request.post url, (err, res, docs) ->
  84. if err?
  85. logger.err err:err, project_id:project_id, "error unarchiving project in docstore"
  86. return callback(err)
  87. if 200 <= res.statusCode < 300
  88. callback()
  89. else
  90. error = new Error("docstore api responded with non-success code: #{res.statusCode}")
  91. logger.err err: error, project_id: project_id, "error unarchiving project in docstore"
  92. return callback(error)