adding base project

This commit is contained in:
Azmat-7860
2026-10-25 23:11:19 +05:30
commit 5993c15b70
23 changed files with 1297 additions and 0 deletions
+27
View File
@@ -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)
+80
View File
@@ -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"}]
+18
View File
@@ -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