TrackChangesClient.coffee 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. request = require "request"
  2. rclient = require("redis").createClient() # Only works locally for now
  3. {db, ObjectId} = require "../../../../app/js/mongojs"
  4. module.exports = TrackChangesClient =
  5. flushAndGetCompressedUpdates: (project_id, doc_id, callback = (error, updates) ->) ->
  6. TrackChangesClient.flushDoc project_id, doc_id, (error) ->
  7. return callback(error) if error?
  8. TrackChangesClient.getCompressedUpdates doc_id, callback
  9. flushDoc: (project_id, doc_id, callback = (error) ->) ->
  10. request.post {
  11. url: "http://localhost:3015/project/#{project_id}/doc/#{doc_id}/flush"
  12. }, (error, response, body) =>
  13. response.statusCode.should.equal 204
  14. callback(error)
  15. flushProject: (project_id, callback = (error) ->) ->
  16. request.post {
  17. url: "http://localhost:3015/project/#{project_id}/flush"
  18. }, (error, response, body) =>
  19. response.statusCode.should.equal 204
  20. callback(error)
  21. getCompressedUpdates: (doc_id, callback = (error, updates) ->) ->
  22. db.docHistory
  23. .find(doc_id: ObjectId(doc_id))
  24. .sort("meta.end_ts": 1)
  25. .toArray callback
  26. getProjectMetaData: (project_id, callback = (error, updates) ->) ->
  27. db.projectHistoryMetaData
  28. .find {
  29. project_id: ObjectId(project_id)
  30. },
  31. (error, projects) ->
  32. callback error, projects[0]
  33. setPreserveHistoryForProject: (project_id, callback = (error) ->) ->
  34. db.projectHistoryMetaData.update {
  35. project_id: ObjectId(project_id)
  36. }, {
  37. $set: { preserveHistory: true }
  38. }, {
  39. upsert: true
  40. }, callback
  41. pushRawUpdates: (project_id, doc_id, updates, callback = (error) ->) ->
  42. rclient.sadd "DocsWithHistoryOps:#{project_id}", doc_id, (error) ->
  43. return callback(error) if error?
  44. rclient.rpush "UncompressedHistoryOps:#{doc_id}", (JSON.stringify(u) for u in updates)..., callback
  45. getDiff: (project_id, doc_id, from, to, callback = (error, diff) ->) ->
  46. request.get {
  47. url: "http://localhost:3015/project/#{project_id}/doc/#{doc_id}/diff?from=#{from}&to=#{to}"
  48. }, (error, response, body) =>
  49. response.statusCode.should.equal 200
  50. callback null, JSON.parse(body)
  51. getUpdates: (project_id, options, callback = (error, body) ->) ->
  52. request.get {
  53. url: "http://localhost:3015/project/#{project_id}/updates?before=#{options.before}&min_count=#{options.min_count}"
  54. }, (error, response, body) =>
  55. response.statusCode.should.equal 200
  56. callback null, JSON.parse(body)
  57. restoreDoc: (project_id, doc_id, version, user_id, callback = (error) ->) ->
  58. request.post {
  59. url: "http://localhost:3015/project/#{project_id}/doc/#{doc_id}/version/#{version}/restore"
  60. headers:
  61. "X-User-Id": user_id
  62. }, (error, response, body) =>
  63. response.statusCode.should.equal 204
  64. callback null