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,84 +530,80 @@ 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")] [HttpGet("get/master-list")]
public async Task<IActionResult> GetMasterList() public async Task<IActionResult> GetMasterList()
{ {
// Start logging scope for observability
try
{
// Get currently logged-in employee
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
_logger.LogInfo("Fetching master list for EmployeeId: {EmployeeId}", loggedInEmployee.Id);
using var scope = _serviceScopeFactory.CreateScope(); using var scope = _serviceScopeFactory.CreateScope();
var _generalHelper = scope.ServiceProvider.GetRequiredService<GeneralHelper>(); var generalHelper = scope.ServiceProvider.GetRequiredService<GeneralHelper>();
var featureIds = await _generalHelper.GetFeatureIdsByTenentIdAsync(tenantId); // Fetch features enabled for tenant
List<MasterMenuVM> response = new List<MasterMenuVM>(); var featureIds = await generalHelper.GetFeatureIdsByTenentIdAsync(tenantId);
_logger.LogInfo("Enabled features for TenantId: {TenantId} -> {FeatureIds}", tenantId, string.Join(",", featureIds));
if (featureIds.Contains(EmployeeManagement)) // Define static master menus for each feature section
var featureMenus = new Dictionary<Guid, List<MasterMenuVM>>
{ {
List<MasterMenuVM> masterMenuVM = [
new MasterMenuVM
{ {
Id = 1, EmployeeManagement, new List<MasterMenuVM>
Name = "Application Role" {
new MasterMenuVM { Id = 1, Name = "Application Role" },
new MasterMenuVM { Id = 2, Name = "Job Role" }
}
}, },
new MasterMenuVM
{ {
Id = 2, ProjectManagement, new List<MasterMenuVM>
Name = "Job Role" {
new MasterMenuVM { Id = 3, Name = "Activity" },
new MasterMenuVM { Id = 4, Name = "Work Category" }
} }
];
response.AddRange(masterMenuVM);
}
if (featureIds.Contains(ProjectManagement))
{
List<MasterMenuVM> masterMenuVM = [
new MasterMenuVM
{
Id = 3,
Name = "Activity"
}, },
new MasterMenuVM
{ {
Id = 4, DirectoryManagement, new List<MasterMenuVM>
Name = "Work Category" {
new MasterMenuVM { Id = 5, Name = "Contact Category" },
new MasterMenuVM { Id = 6, Name = "Contact Tag" }
} }
];
response.AddRange(masterMenuVM);
}
if (featureIds.Contains(DirectoryManagement))
{
List<MasterMenuVM> masterMenuVM = [
new MasterMenuVM
{
Id = 5,
Name = "Contact Category"
}, },
new MasterMenuVM
{ {
Id = 6, ExpenseManagement, new List<MasterMenuVM>
Name = "Contact Tag" {
new MasterMenuVM { Id = 7, Name = "Expense Type" },
new MasterMenuVM { Id = 8, Name = "Payment Mode" }
} }
];
response.AddRange(masterMenuVM);
} }
if (featureIds.Contains(ExpenseManagement)) };
{
List<MasterMenuVM> masterMenuVM = [ // Aggregate menus based on enabled features
new MasterMenuVM var response = featureIds
{ .Where(id => featureMenus.ContainsKey(id))
Id = 7, .SelectMany(id => featureMenus[id])
Name = "Expense Type" .ToList();
},
new MasterMenuVM _logger.LogInfo("MasterMenu count for TenantId {TenantId}: {Count}", tenantId, response.Count);
{
Id = 8, return Ok(ApiResponse<object>.SuccessResponse(response, "Successfully fetched the master table list", 200));
Name = "Payment Mode" }
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."));
} }
];
response.AddRange(masterMenuVM);
} }
return Ok(response);
}
} }