diff --git a/Marco.Pms.Services/Controllers/AppMenuController.cs b/Marco.Pms.Services/Controllers/AppMenuController.cs
index d8d9414..9adbf83 100644
--- a/Marco.Pms.Services/Controllers/AppMenuController.cs
+++ b/Marco.Pms.Services/Controllers/AppMenuController.cs
@@ -530,85 +530,81 @@ namespace Marco.Pms.Services.Controllers
}
}
+ ///
+ /// Retrieves the master menu list based on enabled features for the current tenant.
+ ///
+ /// List of master menu items available for the tenant
[HttpGet("get/master-list")]
public async Task GetMasterList()
{
- var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
- using var scope = _serviceScopeFactory.CreateScope();
- var _generalHelper = scope.ServiceProvider.GetRequiredService();
+ // Start logging scope for observability
- var featureIds = await _generalHelper.GetFeatureIdsByTenentIdAsync(tenantId);
- List response = new List();
+ try
+ {
+ // Get currently logged-in employee
+ var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
+ _logger.LogInfo("Fetching master list for EmployeeId: {EmployeeId}", loggedInEmployee.Id);
- if (featureIds.Contains(EmployeeManagement))
- {
- List masterMenuVM = [
- new MasterMenuVM
- {
- Id = 1,
- Name = "Application Role"
- },
- new MasterMenuVM
- {
- Id = 2,
- Name = "Job Role"
- }
- ];
- response.AddRange(masterMenuVM);
- }
- if (featureIds.Contains(ProjectManagement))
- {
- List masterMenuVM = [
- new MasterMenuVM
- {
- Id = 3,
- Name = "Activity"
- },
- new MasterMenuVM
- {
- Id = 4,
- Name = "Work Category"
- }
- ];
- response.AddRange(masterMenuVM);
- }
- if (featureIds.Contains(DirectoryManagement))
- {
- List masterMenuVM = [
- new MasterMenuVM
- {
- Id = 5,
- Name = "Contact Category"
- },
- new MasterMenuVM
- {
- Id = 6,
- Name = "Contact Tag"
- }
- ];
- response.AddRange(masterMenuVM);
- }
- if (featureIds.Contains(ExpenseManagement))
- {
- List masterMenuVM = [
- new MasterMenuVM
- {
- Id = 7,
- Name = "Expense Type"
- },
- new MasterMenuVM
- {
- Id = 8,
- Name = "Payment Mode"
- }
- ];
- response.AddRange(masterMenuVM);
- }
+ using var scope = _serviceScopeFactory.CreateScope();
+ var generalHelper = scope.ServiceProvider.GetRequiredService();
- return Ok(response);
+ // Fetch features enabled for tenant
+ var featureIds = await generalHelper.GetFeatureIdsByTenentIdAsync(tenantId);
+ _logger.LogInfo("Enabled features for TenantId: {TenantId} -> {FeatureIds}", tenantId, string.Join(",", featureIds));
+
+ // Define static master menus for each feature section
+ var featureMenus = new Dictionary>
+ {
+ {
+ EmployeeManagement, new List
+ {
+ new MasterMenuVM { Id = 1, Name = "Application Role" },
+ new MasterMenuVM { Id = 2, Name = "Job Role" }
+ }
+ },
+ {
+ ProjectManagement, new List
+ {
+ new MasterMenuVM { Id = 3, Name = "Activity" },
+ new MasterMenuVM { Id = 4, Name = "Work Category" }
+ }
+ },
+ {
+ DirectoryManagement, new List
+ {
+ new MasterMenuVM { Id = 5, Name = "Contact Category" },
+ new MasterMenuVM { Id = 6, Name = "Contact Tag" }
+ }
+ },
+ {
+ ExpenseManagement, new List
+ {
+ new MasterMenuVM { Id = 7, Name = "Expense Type" },
+ new MasterMenuVM { Id = 8, Name = "Payment Mode" }
+ }
+ }
+ };
+
+ // Aggregate menus based on enabled features
+ var response = featureIds
+ .Where(id => featureMenus.ContainsKey(id))
+ .SelectMany(id => featureMenus[id])
+ .ToList();
+
+ _logger.LogInfo("MasterMenu count for TenantId {TenantId}: {Count}", tenantId, response.Count);
+
+ return Ok(ApiResponse