feat: restore page version

This commit is contained in:
NGPixel
2020-02-29 23:40:07 -05:00
committed by Nicolas Giard
parent e50dc89519
commit e85de92715
5 changed files with 125 additions and 8 deletions

View File

@@ -385,7 +385,7 @@ module.exports = {
try {
const page = await WIKI.models.pages.query().findById(args.id)
if (!page) {
throw new Error('Invalid Page Id')
throw new WIKI.Error.PageNotFound()
}
await WIKI.models.pages.renderPage(page)
return {
@@ -394,6 +394,42 @@ module.exports = {
} catch (err) {
return graphHelper.generateError(err)
}
},
/**
* RESTORE PAGE VERSION
*/
async restore (obj, args, context) {
try {
const page = await WIKI.models.pages.query().select('path', 'localeCode').findById(args.pageId)
if (!page) {
throw new WIKI.Error.PageNotFound()
}
if (!WIKI.auth.checkAccess(context.req.user, ['write:pages'], {
path: page.path,
locale: page.localeCode
})) {
throw new WIKI.Error.PageRestoreForbidden()
}
const targetVersion = await WIKI.models.pageHistory.getVersion({ pageId: args.pageId, versionId: args.versionId })
if (!targetVersion) {
throw new WIKI.Error.PageNotFound()
}
await WIKI.models.pages.updatePage({
...targetVersion,
id: targetVersion.pageId,
user: context.req.user,
action: 'restored'
})
return {
responseResult: graphHelper.generateSuccess('Page version restored successfully.')
}
} catch (err) {
return graphHelper.generateError(err)
}
}
},
Page: {

View File

@@ -129,6 +129,11 @@ type PageMutation {
render(
id: Int!
): DefaultResponse @auth(requires: ["manage:system"])
restore(
pageId: Int!
versionId: Int!
): DefaultResponse @auth(requires: ["write:pages", "manage:pages", "manage:system"])
}
# -----------------------------------------------

View File

@@ -153,6 +153,10 @@ module.exports = {
message: 'Destination page path already exists.',
code: 6006
}),
PageRestoreForbidden: CustomError('PageRestoreForbidden', {
message: 'You are not authorized to restore this page version.',
code: 6011
}),
PageUpdateForbidden: CustomError('PageUpdateForbidden', {
message: 'You are not authorized to update this page.',
code: 6009

View File

@@ -326,7 +326,8 @@ module.exports = class Page extends Model {
await WIKI.models.pageHistory.addVersion({
...ogPage,
isPublished: ogPage.isPublished === true || ogPage.isPublished === 1,
action: 'updated'
action: opts.action ? opts.action : 'updated',
versionDate: ogPage.updatedAt
})
// -> Update page
@@ -422,7 +423,8 @@ module.exports = class Page extends Model {
// -> Create version snapshot
await WIKI.models.pageHistory.addVersion({
...page,
action: 'moved'
action: 'moved',
versionDate: page.updatedAt
})
const destinationHash = pageHelper.generateHash({ path: opts.destinationPath, locale: opts.destinationLocale, privateNS: opts.isPrivate ? 'TODO' : '' })
@@ -503,7 +505,8 @@ module.exports = class Page extends Model {
// -> Create version snapshot
await WIKI.models.pageHistory.addVersion({
...page,
action: 'deleted'
action: 'deleted',
versionDate: page.updatedAt
})
// -> Delete page