Added new get menu list for mobile

This commit is contained in:
ashutosh.nehete 2025-08-26 15:17:00 +05:30
parent 6253ba7de3
commit 03f7a5ba14
6 changed files with 175 additions and 1 deletions

View File

@ -0,0 +1,13 @@
namespace Marco.Pms.Model.ViewModels.DocumentManager
{
public class MenuItemVM
{
public Guid Id { get; set; }
public string? Name { get; set; }
public string? Icon { get; set; }
public bool Available { get; set; }
public string? Link { get; set; }
public List<SubMenuItemVM> Submenu { get; set; } = new List<SubMenuItemVM>();
}
}

View File

@ -0,0 +1,9 @@
namespace Marco.Pms.Model.ViewModels.DocumentManager
{
public class MenuSectionApplicationVM
{
public Guid Id { get; set; }
public string? Name { get; set; }
public bool Available { get; set; }
}
}

View File

@ -0,0 +1,11 @@
namespace Marco.Pms.Model.ViewModels.DocumentManager
{
public class MenuSectionVM
{
public Guid Id { get; set; }
public string? Header { get; set; }
public string? Name { get; set; }
public List<MenuItemVM> Items { get; set; } = new List<MenuItemVM>();
}
}

View File

@ -0,0 +1,12 @@
namespace Marco.Pms.Model.ViewModels.DocumentManager
{
public class SubMenuItemVM
{
public Guid Id { get; set; }
public string? Name { get; set; }
public bool Available { get; set; }
public string? Link { get; set; }
}
}

View File

@ -4,6 +4,7 @@ using Marco.Pms.Model.AppMenu;
using Marco.Pms.Model.Dtos.AppMenu;
using Marco.Pms.Model.Utilities;
using Marco.Pms.Model.ViewModels.AppMenu;
using Marco.Pms.Model.ViewModels.DocumentManager;
using Marco.Pms.Services.Helpers;
using Marco.Pms.Services.Service;
using MarcoBMS.Services.Helpers;
@ -518,7 +519,8 @@ namespace Marco.Pms.Services.Controllers
_logger.LogInfo("Fetched sidebar menu successfully. Tenant: {TenantId}, EmployeeId: {EmployeeId}, SectionsReturned: {Count}",
tenantId, employeeId, menus.Count);
return Ok(ApiResponse<object>.SuccessResponse(menus, "Sidebar menu fetched successfully"));
var response = _mapper.Map<List<MenuSectionVM>>(menus);
return Ok(ApiResponse<object>.SuccessResponse(response, "Sidebar menu fetched successfully"));
}
catch (Exception ex)
{
@ -612,6 +614,121 @@ namespace Marco.Pms.Services.Controllers
}
}
[HttpGet("get/menu-mobile")]
public async Task<IActionResult> GetAppSideBarMenuForobile()
{
// Step 1: Get logged-in employee
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var employeeId = loggedInEmployee.Id;
using var scope = _serviceScopeFactory.CreateScope();
var _permissions = scope.ServiceProvider.GetRequiredService<PermissionServices>();
try
{
// Step 2: Fetch all menu sections for the tenant
var menus = await _sideBarMenuHelper.GetAllMenuSectionsAsync(tenantId);
List<MenuSectionApplicationVM> response = new List<MenuSectionApplicationVM>();
foreach (var menu in menus)
{
var allowedItems = new List<MenuItem>();
foreach (var item in menu.Items)
{
// --- Item permission check ---
if (!item.PermissionIds.Any())
{
MenuSectionApplicationVM menuVM = new MenuSectionApplicationVM
{
Id = item.Id,
Name = item.Text,
Available = true
};
response.Add(menuVM);
}
else
{
// Convert permission string IDs to GUIDs
var menuPermissionIds = item.PermissionIds
.Select(Guid.Parse)
.ToList();
bool isAllowed = await _permissions.HasPermissionAny(menuPermissionIds, employeeId);
// If allowed, filter its submenus as well
if (isAllowed)
{
if (item.Submenu?.Any() == true)
{
var allowedSubmenus = new List<SubMenuItem>();
foreach (var subItem in item.Submenu)
{
if (!subItem.PermissionIds.Any())
{
MenuSectionApplicationVM subMenuVM = new MenuSectionApplicationVM
{
Id = item.Id,
Name = item.Text,
Available = true
};
response.Add(subMenuVM);
continue;
}
var subMenuPermissionIds = subItem.PermissionIds
.Select(Guid.Parse)
.ToList();
bool isSubItemAllowed = await _permissions.HasPermissionAny(subMenuPermissionIds, employeeId);
if (isSubItemAllowed)
{
MenuSectionApplicationVM subMenuVM = new MenuSectionApplicationVM
{
Id = item.Id,
Name = item.Text,
Available = true
};
response.Add(subMenuVM);
}
}
// Replace with filtered submenus
item.Submenu = allowedSubmenus;
}
MenuSectionApplicationVM menuVM = new MenuSectionApplicationVM
{
Id = item.Id,
Name = item.Text,
Available = true
};
response.Add(menuVM);
}
}
}
// Replace with filtered items
menu.Items = allowedItems;
}
// Step 3: Log success
_logger.LogInfo("Fetched sidebar menu successfully. Tenant: {TenantId}, EmployeeId: {EmployeeId}, SectionsReturned: {Count}",
tenantId, employeeId, menus.Count);
return Ok(ApiResponse<object>.SuccessResponse(response, "Sidebar menu fetched successfully", 200));
}
catch (Exception ex)
{
// Step 4: Handle unexpected errors
_logger.LogError(ex, "Error occurred while fetching sidebar menu. Tenant: {TenantId}, EmployeeId: {EmployeeId}",
tenantId, employeeId);
return StatusCode(500, ApiResponse<object>.ErrorResponse("Server Error", "An unexpected error occurred while fetching the sidebar menu.", 500));
}
}
}

View File

@ -311,12 +311,24 @@ namespace Marco.Pms.Services.MappingProfiles
#region ======================================================= AppMenu =======================================================
CreateMap<CreateMenuSectionDto, MenuSection>();
CreateMap<UpdateMenuSectionDto, MenuSection>();
CreateMap<MenuSection, MenuSectionVM>()
.ForMember(
dest => dest.Name,
opt => opt.MapFrom(src => src.Title));
CreateMap<CreateMenuItemDto, MenuItem>();
CreateMap<UpdateMenuItemDto, MenuItem>();
CreateMap<MenuItem, MenuItemVM>()
.ForMember(
dest => dest.Name,
opt => opt.MapFrom(src => src.Text));
CreateMap<CreateSubMenuItemDto, SubMenuItem>();
CreateMap<UpdateSubMenuItemDto, SubMenuItem>();
CreateMap<SubMenuItem, SubMenuItemVM>()
.ForMember(
dest => dest.Name,
opt => opt.MapFrom(src => src.Text));
#endregion
}
}