Document_Manager #129

Merged
ashutosh.nehete merged 83 commits from Document_Manager into main 2025-09-11 04:12:01 +00:00
Showing only changes of commit 4a13386546 - Show all commits

View File

@ -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 ===================================================================