Optimized the get master table list

This commit is contained in:
ashutosh.nehete 2025-08-24 13:53:09 +05:30
parent e7705a5051
commit 300f570907

View File

@ -530,85 +530,81 @@ namespace Marco.Pms.Services.Controllers
}
}
/// <summary>
/// Retrieves the master menu list based on enabled features for the current tenant.
/// </summary>
/// <returns>List of master menu items available for the tenant</returns>
[HttpGet("get/master-list")]
public async Task<IActionResult> GetMasterList()
{
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
using var scope = _serviceScopeFactory.CreateScope();
var _generalHelper = scope.ServiceProvider.GetRequiredService<GeneralHelper>();
// Start logging scope for observability
var featureIds = await _generalHelper.GetFeatureIdsByTenentIdAsync(tenantId);
List<MasterMenuVM> response = new List<MasterMenuVM>();
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> masterMenuVM = [
new MasterMenuVM
{
Id = 1,
Name = "Application Role"
},
new MasterMenuVM
{
Id = 2,
Name = "Job Role"
}
];
response.AddRange(masterMenuVM);
}
if (featureIds.Contains(ProjectManagement))
{
List<MasterMenuVM> masterMenuVM = [
new MasterMenuVM
{
Id = 3,
Name = "Activity"
},
new MasterMenuVM
{
Id = 4,
Name = "Work Category"
}
];
response.AddRange(masterMenuVM);
}
if (featureIds.Contains(DirectoryManagement))
{
List<MasterMenuVM> masterMenuVM = [
new MasterMenuVM
{
Id = 5,
Name = "Contact Category"
},
new MasterMenuVM
{
Id = 6,
Name = "Contact Tag"
}
];
response.AddRange(masterMenuVM);
}
if (featureIds.Contains(ExpenseManagement))
{
List<MasterMenuVM> 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<GeneralHelper>();
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<Guid, List<MasterMenuVM>>
{
{
EmployeeManagement, new List<MasterMenuVM>
{
new MasterMenuVM { Id = 1, Name = "Application Role" },
new MasterMenuVM { Id = 2, Name = "Job Role" }
}
},
{
ProjectManagement, new List<MasterMenuVM>
{
new MasterMenuVM { Id = 3, Name = "Activity" },
new MasterMenuVM { Id = 4, Name = "Work Category" }
}
},
{
DirectoryManagement, new List<MasterMenuVM>
{
new MasterMenuVM { Id = 5, Name = "Contact Category" },
new MasterMenuVM { Id = 6, Name = "Contact Tag" }
}
},
{
ExpenseManagement, new List<MasterMenuVM>
{
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<object>.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<string>.ErrorResponse("An unexpected error occurred while fetching master menu list."));
}
}
}
}