Write docs to do collection and project collection

- docs are written to project collection then doc collection

- deletes used to insert into doc collection, now its the same upsert
with deleted = true

- does not set delted = false for new docs as it is not needed, save space

- changed delete to be seperate update on mongo
This commit is contained in:
Henry Oswald
2015-01-21 11:52:39 +00:00
parent 883a7329f1
commit 704bf53fe5
4 changed files with 86 additions and 32 deletions
+12 -4
View File
@@ -2,6 +2,7 @@ MongoManager = require "./MongoManager"
Errors = require "./Errors"
logger = require "logger-sharelatex"
_ = require "underscore"
async = require "async"
module.exports = DocManager =
getDoc: (project_id, doc_id, options, callback = (error, doc, mongoPath) ->) ->
@@ -51,7 +52,13 @@ module.exports = DocManager =
newDocLines: lines
rev: doc.rev
}, "updating doc lines"
MongoManager.updateDoc project_id, mongoPath, lines, (error) ->
async.series [
(cb)->
# project collection is still primary so that needs to be successful first
MongoManager.updateDoc project_id, mongoPath, lines, cb
(cb)->
MongoManager.upsertIntoDocCollection project_id, doc_id, lines, doc.rev, cb
], (error)->
return callback(error) if error?
callback null, true, doc.rev + 1 # rev will have been incremented in mongo by MongoManager.updateDoc
@@ -59,9 +66,10 @@ module.exports = DocManager =
DocManager.getDoc project_id, doc_id, (error, doc) ->
return callback(error) if error?
return callback new Errors.NotFoundError("No such project/doc: #{project_id}/#{doc_id}") if !doc?
MongoManager.insertDoc project_id, doc_id, { lines: doc.lines, deleted: true }, (error) ->
return callback(error) if error?
callback()
MongoManager.upsertIntoDocCollection project_id, doc_id, doc.lines, doc.rev, (error) ->
MongoManager.markDocAsDeleted doc_id, (error) ->
return callback(error) if error?
callback()
findAllDocsInProject: (project, callback = (error, docs) ->) ->
callback null, @_findAllDocsInFolder project.rootFolder[0]
@@ -18,7 +18,18 @@ module.exports = MongoManager =
db.projects.update _id: ObjectId(project_id), update, callback
insertDoc: (project_id, doc_id, attributes, callback = (error) ->) ->
attributes._id = ObjectId(doc_id)
attributes.project_id = ObjectId(project_id)
db.docs.insert attributes, callback
upsertIntoDocCollection: (project_id, doc_id, lines, oldRev, callback)->
update =
$set:{}
update.$set["lines"] = lines
update.$set["project_id"] = ObjectId(project_id)
update.$set["rev"] = oldRev + 1
db.docs.update _id: ObjectId(doc_id), update, {upsert: true}, callback
markDocAsDeleted: (doc_id, callback)->
update =
$set: {}
update.$set["deleted"] = true
db.docs.update _id: ObjectId(doc_id), update, (err)->
callback(err)