1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- const _ = require('lodash')
- /* global WIKI */
- module.exports = async (pageId) => {
- WIKI.logger.info(`Rebuilding page tree...`)
- try {
- WIKI.models = require('../core/db').init()
- await WIKI.configSvc.loadFromDb()
- await WIKI.configSvc.applyFlags()
- const pages = await WIKI.models.pages.query().select('id', 'path', 'localeCode', 'title', 'isPrivate', 'privateNS').orderBy(['localeCode', 'path'])
- let tree = []
- let pik = 0
- for (const page of pages) {
- const pagePaths = page.path.split('/')
- let currentPath = ''
- let depth = 0
- let parentId = null
- let ancestors = []
- for (const part of pagePaths) {
- depth++
- const isFolder = (depth < pagePaths.length)
- currentPath = currentPath ? `${currentPath}/${part}` : part
- const found = _.find(tree, {
- localeCode: page.localeCode,
- path: currentPath
- })
- if (!found) {
- pik++
- tree.push({
- id: pik,
- localeCode: page.localeCode,
- path: currentPath,
- depth: depth,
- title: isFolder ? part : page.title,
- isFolder: isFolder,
- isPrivate: !isFolder && page.isPrivate,
- privateNS: !isFolder ? page.privateNS : null,
- parent: parentId,
- pageId: isFolder ? null : page.id,
- ancestors: JSON.stringify(ancestors)
- })
- parentId = pik
- } else if (isFolder && !found.isFolder) {
- found.isFolder = true
- parentId = found.id
- } else {
- parentId = found.id
- }
- ancestors.push(parentId)
- }
- }
- await WIKI.models.knex.table('pageTree').truncate()
- if (tree.length > 0) {
- // -> Save in chunks, because of per query max parameters (35k Postgres, 2k MSSQL, 1k for SQLite)
- if ((WIKI.config.db.type !== 'sqlite')) {
- for (const chunk of _.chunk(tree, 100)) {
- await WIKI.models.knex.table('pageTree').insert(chunk)
- }
- } else {
- for (const chunk of _.chunk(tree, 60)) {
- await WIKI.models.knex.table('pageTree').insert(chunk)
- }
- }
- }
- await WIKI.models.knex.destroy()
- WIKI.logger.info(`Rebuilding page tree: [ COMPLETED ]`)
- } catch (err) {
- WIKI.logger.error(`Rebuilding page tree: [ FAILED ]`)
- WIKI.logger.error(err.message)
- // exit process with error code
- throw err
- }
- }
|