| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | const Model = require('objection').Modelconst _ = require('lodash')/* global WIKI *//** * Users model */module.exports = class AssetFolder extends Model {  static get tableName() { return 'assetFolders' }  static get jsonSchema () {    return {      type: 'object',      properties: {        id: {type: 'integer'},        name: {type: 'string'},        slug: {type: 'string'}      }    }  }  static get relationMappings() {    return {      parent: {        relation: Model.BelongsToOneRelation,        modelClass: AssetFolder,        join: {          from: 'assetFolders.folderId',          to: 'assetFolders.id'        }      }    }  }  /**   * Get full folder hierarchy starting from specified folder to root   *   * @param {Number} folderId Id of the folder   */  static async getHierarchy (folderId) {    let hier    if (WIKI.config.db.type === 'mssql') {      hier = await WIKI.models.knex.with('ancestors', qb => {        qb.select('id', 'name', 'slug', 'parentId').from('assetFolders').where('id', folderId).unionAll(sqb => {          sqb.select('a.id', 'a.name', 'a.slug', 'a.parentId').from('assetFolders AS a').join('ancestors', 'ancestors.parentId', 'a.id')        })      }).select('*').from('ancestors')    }    else {      hier = await WIKI.models.knex.withRecursive('ancestors', qb => {        qb.select('id', 'name', 'slug', 'parentId').from('assetFolders').where('id', folderId).union(sqb => {          sqb.select('a.id', 'a.name', 'a.slug', 'a.parentId').from('assetFolders AS a').join('ancestors', 'ancestors.parentId', 'a.id')        })      }).select('*').from('ancestors')    }    // The ancestors are from children to grandparents, must reverse for correct path order.    return _.reverse(hier)  }  /**   * Get full folder paths   */  static async getAllPaths () {    const all = await WIKI.models.assetFolders.query()    let folders = {}    all.forEach(fld => {      _.set(folders, fld.id, fld.slug)      let parentId = fld.parentId      while (parentId !== null || parentId > 0) {        const parent = _.find(all, ['id', parentId])        _.set(folders, fld.id, `${parent.slug}/${_.get(folders, fld.id)}`)        parentId = parent.parentId      }    })    return folders  }}
 |