Document_Manager #129
@ -1734,21 +1734,44 @@ namespace Marco.Pms.Services.Service
|
||||
|
||||
public async Task<ApiResponse<object>> GetEmployeeToWhomProjectLevelAssignedAsync(Guid projectId, Guid tenantId, Employee loggedInEmployee)
|
||||
{
|
||||
var assignedEmployees = await _context.ProjectLevelPermissionMappings
|
||||
.Include(pl => pl.Employee)
|
||||
.ThenInclude(e => e!.JobRole)
|
||||
.AsNoTracking()
|
||||
.Where(pl => pl.ProjectId == projectId
|
||||
&& pl.TenantId == tenantId)
|
||||
.Select(pl => pl.Employee)
|
||||
.Distinct()
|
||||
.ToListAsync();
|
||||
// Log method entry and parameters for traceability
|
||||
_logger.LogInfo("Fetching employees with project-level permissions. ProjectId: {ProjectId}, TenantId: {TenantId}, RequestedBy: {EmployeeId}",
|
||||
projectId, tenantId, loggedInEmployee.Id);
|
||||
|
||||
var response = _mapper.Map<List<BasicEmployeeVM>>(assignedEmployees);
|
||||
try
|
||||
{
|
||||
// ✅ Optimized query: Selecting only employees with necessary joins
|
||||
// Instead of fetching entire mapping objects, directly project required employees
|
||||
var assignedEmployees = await _context.ProjectLevelPermissionMappings
|
||||
.Include(pl => pl.Employee)
|
||||
.ThenInclude(e => e!.JobRole)
|
||||
.AsNoTracking()
|
||||
.Where(pl => pl.ProjectId == projectId && pl.TenantId == tenantId)
|
||||
.Select(pl => pl.Employee) // only employees
|
||||
.Distinct() // ensure unique employees
|
||||
.ToListAsync();
|
||||
|
||||
return ApiResponse<object>.SuccessResponse(response, "The list of employees with project-level permissions has been successfully retrieved.", 200);
|
||||
_logger.LogInfo("Retrieved {Count} employees with project-level permissions for ProjectId: {ProjectId}, TenantId: {TenantId}",
|
||||
assignedEmployees.Count, projectId, tenantId);
|
||||
|
||||
// ✅ Use AutoMapper to transform DB entities into VMs
|
||||
var response = _mapper.Map<List<BasicEmployeeVM>>(assignedEmployees);
|
||||
|
||||
// Return a consistent API response with success message
|
||||
return ApiResponse<object>.SuccessResponse(response, "The list of employees with project-level permissions has been successfully retrieved.", 200);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Log exception details for debugging
|
||||
_logger.LogError(ex, "Error occurred while fetching employees for ProjectId: {ProjectId}, TenantId: {TenantId}, RequestedBy: {EmployeeId}",
|
||||
projectId, tenantId, loggedInEmployee.Id);
|
||||
|
||||
// Return standard error response
|
||||
return ApiResponse<object>.ErrorResponse("An error occurred while retrieving employees with project-level permissions.", 500);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Helper Functions ===================================================================
|
||||
|
Loading…
x
Reference in New Issue
Block a user