Add API endpoint to fetch menu item tree
This commit is contained in:
parent
617a77b809
commit
85e0af2e9d
36
app/controllers/api/v1/Menu.controller.js
Normal file
36
app/controllers/api/v1/Menu.controller.js
Normal file
@ -0,0 +1,36 @@
|
||||
const Controller = require('libflitter/controller/Controller')
|
||||
|
||||
/*
|
||||
* Menu Controller
|
||||
* -------------------------------------------------------------
|
||||
* Put some description here!
|
||||
*/
|
||||
class Menu extends Controller {
|
||||
static get services() {
|
||||
return [...super.services, 'models']
|
||||
}
|
||||
|
||||
async get_items(req, res) {
|
||||
const root_page = await req.user.get_root_page()
|
||||
const nodes = await this._build_menu_object(root_page)
|
||||
return res.api(nodes)
|
||||
}
|
||||
|
||||
async _build_menu_object(parent_node, arr= []) {
|
||||
const children = await this.models.get('api:Page').find({UUID: {$in: parent_node.ChildPageIds}})
|
||||
if ( children ) {
|
||||
for ( const child of children ) {
|
||||
arr.push({
|
||||
id: child.UUID,
|
||||
name: child.Name,
|
||||
children: await this._build_menu_object(child),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return arr
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = exports = Menu
|
@ -6,12 +6,21 @@ const AuthUser = require('flitter-auth/model/User')
|
||||
* properties here as you need.
|
||||
*/
|
||||
class User extends AuthUser {
|
||||
static get services() {
|
||||
return [...super.services, 'models']
|
||||
}
|
||||
|
||||
static get schema() {
|
||||
return {...super.schema, ...{
|
||||
// other schema fields here
|
||||
}}
|
||||
}
|
||||
|
||||
async get_root_page() {
|
||||
const Page = this.models.get('api:Page')
|
||||
return Page.findOne({OrgUserId: this._id, ParentId: '0'})
|
||||
}
|
||||
|
||||
// Other members and methods here
|
||||
}
|
||||
|
||||
|
@ -39,6 +39,8 @@ const index = {
|
||||
'/hello_world': ['controller::api:v1:Misc.hello_world'],
|
||||
'/page/:PageId': ['controller::api:v1:Page.get_page'],
|
||||
'/page/:PageId/nodes': ['controller::api:v1:Page.get_nodes'],
|
||||
|
||||
'/menu/items': ['controller::api:v1:Menu.get_items'],
|
||||
},
|
||||
|
||||
post: {
|
||||
|
Loading…
Reference in New Issue
Block a user