123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- const Model = require('objection').Model
- const _ = 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
- }
- }
|