Files
2026-10-25 23:11:19 +05:30

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"}]