Add ability to retrieve specific page versions and nodes with ?version=XX param
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2020-11-02 20:04:10 -06:00
parent 14babd5b8b
commit 52382f6bf7
3 changed files with 112 additions and 8 deletions

View File

@@ -12,13 +12,24 @@ class Page extends Controller {
const PageId = req.params.PageId
const user = req.user
const page = await PageModel.findOne({UUID: PageId})
let page = await PageModel.findOne({UUID: PageId})
if ( !page ) return res.status(404).message('Page not found with that ID.').api({})
if ( !(await page.is_accessible_by(user)) ) return req.security.deny()
page.level = await page.access_level_for(req.user)
const level = await page.access_level_for(req.user)
return res.api(page)
const version_num = req.body.version || req.query.version
if ( version_num ) {
if ( page.has_version(version_num) ) {
page = await page.as_version(version_num)
}
}
const data = page.toJSON()
delete data.version_archive
data.level = level
data._id = page.id
return res.api(data)
}
async save_page(req, res) {
@@ -35,7 +46,7 @@ class Page extends Controller {
page.OrgUserId = req.user._id
}
let save_message = 'Updated page metadata'
let save_message = 'Page contents saved'
if ( !req.body.Name ) return res.status(400).message('Missing required: Name').api({})
@@ -84,17 +95,24 @@ class Page extends Controller {
if ( !(await page.is_accessible_by(req.user)) ) return req.security.deny()
}
const nodes = await Node.find({PageId: page.UUID});
const version_num = req.body.version || req.query.version
if ( version_num ) {
if ( page.has_version(version_num) ) {
page = await page.as_version(version_num)
}
}
const nodes = await page.nodes
const assoc_nodes = {}
nodes.forEach(node => {
assoc_nodes[node.UUID] = node
})
const return_nodes = [];
const return_nodes = []
for ( const uuid of page.NodeIds ) {
return_nodes.push(assoc_nodes[uuid])
}
return res.api(return_nodes);
return res.api(return_nodes)
}
async save_node_to_page(req, res) {