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.SuccessResponse(response, "Successfully fetched the master table list", 200)); + } + catch (Exception ex) + { + // Critical error tracking + _logger.LogError(ex, "Error occurred while fetching master menu list for TenantId: {TenantId}", tenantId); + return StatusCode(500, ApiResponse.ErrorResponse("An unexpected error occurred while fetching master menu list.")); + } } + } }