|
@@ -5,20 +5,21 @@ const { callbackify } = require('util')
|
|
|
|
|
|
|
|
const ARCHIVING_LOCK_DURATION_MS = Settings.archivingLockDurationMs
|
|
const ARCHIVING_LOCK_DURATION_MS = Settings.archivingLockDurationMs
|
|
|
|
|
|
|
|
-async function findDoc(projectId, docId, filter) {
|
|
|
|
|
|
|
+async function findDoc(projectId, docId, projection) {
|
|
|
const doc = await db.docs.findOne(
|
|
const doc = await db.docs.findOne(
|
|
|
{
|
|
{
|
|
|
_id: new ObjectId(docId.toString()),
|
|
_id: new ObjectId(docId.toString()),
|
|
|
project_id: new ObjectId(projectId.toString()),
|
|
project_id: new ObjectId(projectId.toString()),
|
|
|
},
|
|
},
|
|
|
- {
|
|
|
|
|
- projection: filter,
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ { projection }
|
|
|
)
|
|
)
|
|
|
|
|
+ if (doc && projection.version && !doc.version) {
|
|
|
|
|
+ doc.version = 0
|
|
|
|
|
+ }
|
|
|
return doc
|
|
return doc
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-async function getProjectsDeletedDocs(projectId, filter) {
|
|
|
|
|
|
|
+async function getProjectsDeletedDocs(projectId, projection) {
|
|
|
const docs = await db.docs
|
|
const docs = await db.docs
|
|
|
.find(
|
|
.find(
|
|
|
{
|
|
{
|
|
@@ -26,7 +27,7 @@ async function getProjectsDeletedDocs(projectId, filter) {
|
|
|
deleted: true,
|
|
deleted: true,
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
- projection: filter,
|
|
|
|
|
|
|
+ projection,
|
|
|
sort: { deletedAt: -1 },
|
|
sort: { deletedAt: -1 },
|
|
|
limit: Settings.max_deleted_docs,
|
|
limit: Settings.max_deleted_docs,
|
|
|
}
|
|
}
|
|
@@ -35,13 +36,13 @@ async function getProjectsDeletedDocs(projectId, filter) {
|
|
|
return docs
|
|
return docs
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-async function getProjectsDocs(projectId, options, filter) {
|
|
|
|
|
|
|
+async function getProjectsDocs(projectId, options, projection) {
|
|
|
const query = { project_id: new ObjectId(projectId.toString()) }
|
|
const query = { project_id: new ObjectId(projectId.toString()) }
|
|
|
if (!options.include_deleted) {
|
|
if (!options.include_deleted) {
|
|
|
query.deleted = { $ne: true }
|
|
query.deleted = { $ne: true }
|
|
|
}
|
|
}
|
|
|
const queryOptions = {
|
|
const queryOptions = {
|
|
|
- projection: filter,
|
|
|
|
|
|
|
+ projection,
|
|
|
}
|
|
}
|
|
|
if (options.limit) {
|
|
if (options.limit) {
|
|
|
queryOptions.limit = options.limit
|
|
queryOptions.limit = options.limit
|
|
@@ -203,18 +204,6 @@ async function restoreArchivedDoc(projectId, docId, archivedDoc) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-async function getDocVersion(docId) {
|
|
|
|
|
- const doc = await db.docOps.findOne(
|
|
|
|
|
- { doc_id: new ObjectId(docId) },
|
|
|
|
|
- {
|
|
|
|
|
- projection: {
|
|
|
|
|
- version: 1,
|
|
|
|
|
- },
|
|
|
|
|
- }
|
|
|
|
|
- )
|
|
|
|
|
- return (doc && doc.version) || 0
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
async function getDocRev(docId) {
|
|
async function getDocRev(docId) {
|
|
|
const doc = await db.docs.findOne(
|
|
const doc = await db.docs.findOne(
|
|
|
{ _id: new ObjectId(docId.toString()) },
|
|
{ _id: new ObjectId(docId.toString()) },
|
|
@@ -248,11 +237,6 @@ async function checkRevUnchanged(doc) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
async function destroyProject(projectId) {
|
|
async function destroyProject(projectId) {
|
|
|
- const records = await db.docs
|
|
|
|
|
- .find({ project_id: new ObjectId(projectId) }, { projection: { _id: 1 } })
|
|
|
|
|
- .toArray()
|
|
|
|
|
- const docIds = records.map(r => r._id)
|
|
|
|
|
- await db.docOps.deleteMany({ doc_id: { $in: docIds } })
|
|
|
|
|
await db.docs.deleteMany({ project_id: new ObjectId(projectId) })
|
|
await db.docs.deleteMany({ project_id: new ObjectId(projectId) })
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -270,7 +254,6 @@ module.exports = {
|
|
|
patchDoc: callbackify(patchDoc),
|
|
patchDoc: callbackify(patchDoc),
|
|
|
getDocForArchiving: callbackify(getDocForArchiving),
|
|
getDocForArchiving: callbackify(getDocForArchiving),
|
|
|
markDocAsArchived: callbackify(markDocAsArchived),
|
|
markDocAsArchived: callbackify(markDocAsArchived),
|
|
|
- getDocVersion: callbackify(getDocVersion),
|
|
|
|
|
checkRevUnchanged: callbackify(checkRevUnchanged),
|
|
checkRevUnchanged: callbackify(checkRevUnchanged),
|
|
|
destroyProject: callbackify(destroyProject),
|
|
destroyProject: callbackify(destroyProject),
|
|
|
promises: {
|
|
promises: {
|
|
@@ -285,7 +268,6 @@ module.exports = {
|
|
|
patchDoc,
|
|
patchDoc,
|
|
|
getDocForArchiving,
|
|
getDocForArchiving,
|
|
|
markDocAsArchived,
|
|
markDocAsArchived,
|
|
|
- getDocVersion,
|
|
|
|
|
checkRevUnchanged,
|
|
checkRevUnchanged,
|
|
|
destroyProject,
|
|
destroyProject,
|
|
|
},
|
|
},
|