Optimized the get master table list
This commit is contained in:
parent
e7705a5051
commit
300f570907
@ -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."));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user