adding base project
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
from sqlalchemy import Column, Integer, String, Boolean, DateTime
|
||||
from datetime import datetime
|
||||
from app.core.database import Base
|
||||
|
||||
class GrpMenuAccess(Base):
|
||||
__tablename__ = "grp_menu_access"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True, autoincrement=True)
|
||||
menu_id = Column(Integer, default=0, index=True) # 0 represents root menu
|
||||
menu_item_id = Column(Integer, default=1, index=True)
|
||||
menu_item_desc = Column(String(255), nullable=True)
|
||||
module_name = Column(String(255), nullable=True)
|
||||
main_menu_action_name = Column(String(255), nullable=True) # Angular route path, e.g. /cns-portal/azzu
|
||||
main_menu_icon_name = Column(String(255), nullable=True) # Icon name, e.g. vm-bug or cog
|
||||
item_seq = Column(Integer, default=1)
|
||||
status = Column(String(50), default="A")
|
||||
role = Column(String(100), default="Admin")
|
||||
usr_grp = Column(Integer, default=1)
|
||||
m_create = Column(String(50), default="Y")
|
||||
m_edit = Column(String(50), default="Y")
|
||||
m_query = Column(String(50), default="Y")
|
||||
m_delete = Column(String(50), default="Y")
|
||||
m_export = Column(String(50), default="Y")
|
||||
m_visible = Column(String(50), default="Y")
|
||||
is_disable = Column(String(50), default="N")
|
||||
created_at = Column(DateTime, default=datetime.utcnow)
|
||||
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
@@ -0,0 +1,80 @@
|
||||
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"}]
|
||||
@@ -0,0 +1,18 @@
|
||||
from pydantic import BaseModel
|
||||
from typing import Optional, List, Any
|
||||
|
||||
class MenuItemResponse(BaseModel):
|
||||
id: Optional[int] = None
|
||||
menu_id: int
|
||||
menu_item_id: int
|
||||
menu_item_desc: Optional[str] = None
|
||||
module_name: Optional[str] = None
|
||||
main_menu_action_name: Optional[str] = None
|
||||
main_menu_icon_name: Optional[str] = None
|
||||
item_seq: Optional[int] = 1
|
||||
status: Optional[str] = "A"
|
||||
role: Optional[str] = "Admin"
|
||||
sub_menus: List[Any] = []
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
Reference in New Issue
Block a user