mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-30 20:51:55 +00:00
123 lines
No EOL
5.3 KiB
CoffeeScript
123 lines
No EOL
5.3 KiB
CoffeeScript
request = require("request").defaults(jar: false)
|
|
logger = require "logger-sharelatex"
|
|
settings = require "settings-sharelatex"
|
|
Errors = require "../Errors/Errors"
|
|
|
|
module.exports = DocstoreManager =
|
|
deleteDoc: (project_id, doc_id, callback = (error) ->) ->
|
|
logger.log project_id: project_id, doc_id: doc_id, "deleting doc in docstore api"
|
|
url = "#{settings.apis.docstore.url}/project/#{project_id}/doc/#{doc_id}"
|
|
request.del url, (error, res, body) ->
|
|
return callback(error) if error?
|
|
if 200 <= res.statusCode < 300
|
|
callback(null)
|
|
else if res.statusCode is 404
|
|
error = new Errors.NotFoundError("tried to delete doc not in docstore")
|
|
logger.error err: error, project_id: project_id, doc_id: doc_id, "tried to delete doc not in docstore"
|
|
callback(error) # maybe suppress the error when delete doc which is not present?
|
|
else
|
|
error = new Error("docstore api responded with non-success code: #{res.statusCode}")
|
|
logger.error err: error, project_id: project_id, doc_id: doc_id, "error deleting doc in docstore"
|
|
callback(error)
|
|
|
|
getAllDocs: (project_id, callback = (error) ->) ->
|
|
logger.log project_id: project_id, "getting all docs for project in docstore api"
|
|
url = "#{settings.apis.docstore.url}/project/#{project_id}/doc"
|
|
request.get {
|
|
url: url
|
|
json: true
|
|
}, (error, res, docs) ->
|
|
return callback(error) if error?
|
|
if 200 <= res.statusCode < 300
|
|
callback(null, docs)
|
|
else
|
|
error = new Error("docstore api responded with non-success code: #{res.statusCode}")
|
|
logger.error err: error, project_id: project_id, "error getting all docs from docstore"
|
|
callback(error)
|
|
|
|
getAllRanges: (project_id, callback = (error) ->) ->
|
|
logger.log { project_id }, "getting all doc ranges for project in docstore api"
|
|
url = "#{settings.apis.docstore.url}/project/#{project_id}/ranges"
|
|
request.get {
|
|
url: url
|
|
json: true
|
|
}, (error, res, docs) ->
|
|
return callback(error) if error?
|
|
if 200 <= res.statusCode < 300
|
|
callback(null, docs)
|
|
else
|
|
error = new Error("docstore api responded with non-success code: #{res.statusCode}")
|
|
logger.error err: error, project_id: project_id, "error getting all doc ranges from docstore"
|
|
callback(error)
|
|
|
|
getDoc: (project_id, doc_id, options = {}, callback = (error, lines, rev, version) ->) ->
|
|
if typeof(options) == "function"
|
|
callback = options
|
|
options = {}
|
|
logger.log project_id: project_id, doc_id: doc_id, options: options, "getting doc in docstore api"
|
|
url = "#{settings.apis.docstore.url}/project/#{project_id}/doc/#{doc_id}"
|
|
if options.include_deleted
|
|
url += "?include_deleted=true"
|
|
request.get {
|
|
url: url
|
|
json: true
|
|
}, (error, res, doc) ->
|
|
return callback(error) if error?
|
|
if 200 <= res.statusCode < 300
|
|
logger.log doc_id: doc_id, project_id: project_id, version: doc.version, rev: doc.rev, "got doc from docstore api"
|
|
callback(null, doc.lines, doc.rev, doc.version, doc.ranges)
|
|
else if res.statusCode is 404
|
|
error = new Errors.NotFoundError("doc not found in docstore")
|
|
logger.error err: error, project_id: project_id, doc_id: doc_id, "doc not found in docstore"
|
|
callback(error)
|
|
else
|
|
error = new Error("docstore api responded with non-success code: #{res.statusCode}")
|
|
logger.error err: error, project_id: project_id, doc_id: doc_id, "error getting doc from docstore"
|
|
callback(error)
|
|
|
|
updateDoc: (project_id, doc_id, lines, version, ranges, callback = (error, modified, rev) ->) ->
|
|
logger.log project_id: project_id, doc_id: doc_id, "updating doc in docstore api"
|
|
url = "#{settings.apis.docstore.url}/project/#{project_id}/doc/#{doc_id}"
|
|
request.post {
|
|
url: url
|
|
json:
|
|
lines: lines
|
|
version: version
|
|
ranges: ranges
|
|
}, (error, res, result) ->
|
|
return callback(error) if error?
|
|
if 200 <= res.statusCode < 300
|
|
logger.log project_id: project_id, doc_id: doc_id, "update doc in docstore url finished"
|
|
callback(null, result.modified, result.rev)
|
|
else
|
|
error = new Error("docstore api responded with non-success code: #{res.statusCode}")
|
|
logger.error err: error, project_id: project_id, doc_id: doc_id, "error updating doc in docstore"
|
|
callback(error)
|
|
|
|
archiveProject: (project_id, callback)->
|
|
url = "#{settings.apis.docstore.url}/project/#{project_id}/archive"
|
|
logger.log project_id:project_id, "archiving project in docstore"
|
|
request.post url, (err, res, docs) ->
|
|
if err?
|
|
logger.err err:err, project_id:project_id, "error archving project in docstore"
|
|
return callback(err)
|
|
if 200 <= res.statusCode < 300
|
|
callback()
|
|
else
|
|
error = new Error("docstore api responded with non-success code: #{res.statusCode}")
|
|
logger.err err: error, project_id: project_id, "error archiving project in docstore"
|
|
return callback(error)
|
|
|
|
unarchiveProject: (project_id, callback)->
|
|
url = "#{settings.apis.docstore.url}/project/#{project_id}/unarchive"
|
|
logger.log project_id:project_id, "unarchiving project in docstore"
|
|
request.post url, (err, res, docs) ->
|
|
if err?
|
|
logger.err err:err, project_id:project_id, "error unarchiving project in docstore"
|
|
return callback(err)
|
|
if 200 <= res.statusCode < 300
|
|
callback()
|
|
else
|
|
error = new Error("docstore api responded with non-success code: #{res.statusCode}")
|
|
logger.err err: error, project_id: project_id, "error unarchiving project in docstore"
|
|
return callback(error) |