feat: rebuild tree on page update
This commit is contained in:
		| @@ -263,12 +263,7 @@ module.exports = { | |||||||
|      */ |      */ | ||||||
|     async rebuildTree(obj, args, context) { |     async rebuildTree(obj, args, context) { | ||||||
|       try { |       try { | ||||||
|         const rebuildJob = await WIKI.scheduler.registerJob({ |         await WIKI.models.pages.rebuildTree() | ||||||
|           name: 'rebuild-tree', |  | ||||||
|           immediate: true, |  | ||||||
|           worker: true |  | ||||||
|         }) |  | ||||||
|         await rebuildJob.finished |  | ||||||
|         return { |         return { | ||||||
|           responseResult: graphHelper.generateSuccess('Page tree rebuilt successfully.') |           responseResult: graphHelper.generateSuccess('Page tree rebuilt successfully.') | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -10,7 +10,6 @@ module.exports = async (pageId) => { | |||||||
|     await WIKI.configSvc.loadFromDb() |     await WIKI.configSvc.loadFromDb() | ||||||
|     await WIKI.configSvc.applyFlags() |     await WIKI.configSvc.applyFlags() | ||||||
|  |  | ||||||
|     await WIKI.models.knex.table('pageTree').truncate() |  | ||||||
|     const pages = await WIKI.models.pages.query().select('id', 'path', 'localeCode', 'title', 'isPrivate', 'privateNS').orderBy(['localeCode', 'path']) |     const pages = await WIKI.models.pages.query().select('id', 'path', 'localeCode', 'title', 'isPrivate', 'privateNS').orderBy(['localeCode', 'path']) | ||||||
|     let tree = [] |     let tree = [] | ||||||
|     let pik = 0 |     let pik = 0 | ||||||
| @@ -52,6 +51,7 @@ module.exports = async (pageId) => { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     await WIKI.models.knex.table('pageTree').truncate() | ||||||
|     if (tree.length > 0) { |     if (tree.length > 0) { | ||||||
|       await WIKI.models.knex.table('pageTree').insert(tree) |       await WIKI.models.knex.table('pageTree').insert(tree) | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -270,6 +270,9 @@ module.exports = class Page extends Model { | |||||||
|     // -> Render page to HTML |     // -> Render page to HTML | ||||||
|     await WIKI.models.pages.renderPage(page) |     await WIKI.models.pages.renderPage(page) | ||||||
|  |  | ||||||
|  |     // -> Rebuild page tree | ||||||
|  |     await WIKI.models.pages.rebuildTree() | ||||||
|  |  | ||||||
|     // -> Add to Search Index |     // -> Add to Search Index | ||||||
|     const pageContents = await WIKI.models.pages.query().findById(page.id).select('render') |     const pageContents = await WIKI.models.pages.query().findById(page.id).select('render') | ||||||
|     page.safeContent = WIKI.models.pages.cleanHTML(pageContents.render) |     page.safeContent = WIKI.models.pages.cleanHTML(pageContents.render) | ||||||
| @@ -370,6 +373,11 @@ module.exports = class Page extends Model { | |||||||
|         destinationPath: opts.path, |         destinationPath: opts.path, | ||||||
|         user: opts.user |         user: opts.user | ||||||
|       }) |       }) | ||||||
|  |     } else { | ||||||
|  |       // -> Update title of page tree entry | ||||||
|  |       await WIKI.models.knex.table('pageTree').where({ | ||||||
|  |         pageId: page.id | ||||||
|  |       }).update('title', page.title) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     return page |     return page | ||||||
| @@ -427,6 +435,9 @@ module.exports = class Page extends Model { | |||||||
|     }).findById(page.id) |     }).findById(page.id) | ||||||
|     await WIKI.models.pages.deletePageFromCache(page) |     await WIKI.models.pages.deletePageFromCache(page) | ||||||
|  |  | ||||||
|  |     // -> Rebuild page tree | ||||||
|  |     await WIKI.models.pages.rebuildTree() | ||||||
|  |  | ||||||
|     // -> Rename in Search Index |     // -> Rename in Search Index | ||||||
|     await WIKI.data.searchEngine.renamed({ |     await WIKI.data.searchEngine.renamed({ | ||||||
|       ...page, |       ...page, | ||||||
| @@ -499,6 +510,9 @@ module.exports = class Page extends Model { | |||||||
|     await WIKI.models.pages.query().delete().where('id', page.id) |     await WIKI.models.pages.query().delete().where('id', page.id) | ||||||
|     await WIKI.models.pages.deletePageFromCache(page) |     await WIKI.models.pages.deletePageFromCache(page) | ||||||
|  |  | ||||||
|  |     // -> Rebuild page tree | ||||||
|  |     await WIKI.models.pages.rebuildTree() | ||||||
|  |  | ||||||
|     // -> Delete from Search Index |     // -> Delete from Search Index | ||||||
|     await WIKI.data.searchEngine.deleted(page) |     await WIKI.data.searchEngine.deleted(page) | ||||||
|  |  | ||||||
| @@ -519,14 +533,14 @@ module.exports = class Page extends Model { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|    * Reconnect links to new/updated/deleted page |    * Reconnect links to new/move/deleted page | ||||||
|    * |    * | ||||||
|    * @param {Object} opts - Page parameters |    * @param {Object} opts - Page parameters | ||||||
|    * @param {string} opts.path - Page Path |    * @param {string} opts.path - Page Path | ||||||
|    * @param {string} opts.locale - Page Locale Code |    * @param {string} opts.locale - Page Locale Code | ||||||
|    * @param {string} [opts.sourcePath] - Previous Page Path (move only) |    * @param {string} [opts.sourcePath] - Previous Page Path (move only) | ||||||
|    * @param {string} [opts.sourceLocale] - Previous Page Locale Code (move only) |    * @param {string} [opts.sourceLocale] - Previous Page Locale Code (move only) | ||||||
|    * @param {string} opts.mode - Page Update mode (new, move, delete) |    * @param {string} opts.mode - Page Update mode (create, move, delete) | ||||||
|    * @returns {Promise} Promise with no value |    * @returns {Promise} Promise with no value | ||||||
|    */ |    */ | ||||||
|   static async reconnectLinks (opts) { |   static async reconnectLinks (opts) { | ||||||
| @@ -595,6 +609,20 @@ module.exports = class Page extends Model { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * Rebuild page tree for new/updated/deleted page | ||||||
|  |    * | ||||||
|  |    * @returns {Promise} Promise with no value | ||||||
|  |    */ | ||||||
|  |   static async rebuildTree() { | ||||||
|  |     const rebuildJob = await WIKI.scheduler.registerJob({ | ||||||
|  |       name: 'rebuild-tree', | ||||||
|  |       immediate: true, | ||||||
|  |       worker: true | ||||||
|  |     }) | ||||||
|  |     return rebuildJob.finished | ||||||
|  |   } | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|    * Trigger the rendering of a page |    * Trigger the rendering of a page | ||||||
|    * |    * | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user