81 lines
2.7 KiB
Python
81 lines
2.7 KiB
Python
from fastapi import APIRouter, Depends, HTTPException, status
|
|||
|
|
from sqlalchemy.orm import Session
|
||
|
|
from typing import List, Any, Optional
|
||
|
|
|
||
|
|
from app.core.deps import get_db, get_current_user_token
|
||
|
|
from app.menu.models import GrpMenuAccess
|
||
|
|
|
||
|
|
router = APIRouter(tags=["Menu & Navigation"])
|
||
|
|
|
||
|
|
@router.get("/fndMenu/menuloadbyuser")
|
||
|
|
@router.get("/MenuAccess/set_menu_for_user")
|
||
|
|
def menu_load_by_user(
|
||
|
|
db: Session = Depends(get_db),
|
||
|
|
token_payload: Optional[dict] = Depends(get_current_user_token)
|
||
|
|
):
|
||
|
|
"""
|
||
|
|
Returns menu hierarchy matching Spring Boot's LoadMenuController /menuloadbyuser.
|
||
|
|
Fetches all root menu items (menu_id = 0) and attaches their corresponding submenus.
|
||
|
|
"""
|
||
|
|
usr_grp = 1
|
||
|
|
if token_payload:
|
||
|
|
usr_grp = token_payload.get("user_grp", 1)
|
||
|
|
|
||
|
|
# 1. Fetch root menus (menu_id == 0)
|
||
|
|
roots = db.query(GrpMenuAccess).filter(
|
||
|
|
GrpMenuAccess.menu_id == 0,
|
||
|
|
GrpMenuAccess.usr_grp == usr_grp,
|
||
|
|
GrpMenuAccess.status == "A"
|
||
|
|
).order_by(GrpMenuAccess.item_seq).all()
|
||
|
|
|
||
|
|
response_list = []
|
||
|
|
for r in roots:
|
||
|
|
# 2. Fetch submenus for each root
|
||
|
|
submenus = db.query(GrpMenuAccess).filter(
|
||
|
|
GrpMenuAccess.menu_id == r.menu_item_id,
|
||
|
|
GrpMenuAccess.usr_grp == usr_grp,
|
||
|
|
GrpMenuAccess.status == "A"
|
||
|
|
).order_by(GrpMenuAccess.item_seq).all()
|
||
|
|
|
||
|
|
sub_list = []
|
||
|
|
for s in submenus:
|
||
|
|
sub_list.append({
|
||
|
|
"id": s.id,
|
||
|
|
"menuId": s.menu_id,
|
||
|
|
"menuItemId": s.menu_item_id,
|
||
|
|
"menuItemDesc": s.menu_item_desc,
|
||
|
|
"moduleName": s.module_name,
|
||
|
|
"main_menu_action_name": s.main_menu_action_name,
|
||
|
|
"main_menu_icon_name": s.main_menu_icon_name,
|
||
|
|
"itemSeq": s.item_seq,
|
||
|
|
"status": s.status,
|
||
|
|
"role": s.role,
|
||
|
|
"mCreate": s.m_create,
|
||
|
|
"mEdit": s.m_edit,
|
||
|
|
"mQuery": s.m_query,
|
||
|
|
"mDelete": s.m_delete,
|
||
|
|
"mexport": s.m_export,
|
||
|
|
"mVisible": s.m_visible
|
||
|
|
})
|
||
|
|
|
||
|
|
response_list.append({
|
||
|
|
"id": r.id,
|
||
|
|
"menuId": r.menu_id,
|
||
|
|
"menuItemId": r.menu_item_id,
|
||
|
|
"menuItemDesc": r.menu_item_desc,
|
||
|
|
"moduleName": r.module_name,
|
||
|
|
"main_menu_action_name": r.main_menu_action_name,
|
||
|
|
"main_menu_icon_name": r.main_menu_icon_name,
|
||
|
|
"itemSeq": r.item_seq,
|
||
|
|
"status": r.status,
|
||
|
|
"role": r.role,
|
||
|
|
"subMenus": sub_list
|
||
|
|
})
|
||
|
|
|
||
|
|
return response_list
|
||
|
|
|
||
|
|
@router.get("/fndMenu/listofusrgrp")
|
||
|
|
def list_of_usr_grp(db: Session = Depends(get_db)):
|
||
|
|
"""Returns all distinct user groups."""
|
||
|
|
return [{"usrGrp": 1, "groupName": "Admin Group"}]
|