123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 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) {
- const 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)
- }
- }
|