Ashutosh_Refactor #107

Merged
ashutosh.nehete merged 52 commits from Ashutosh_Refactor into main 2025-07-18 13:01:29 +00:00
Showing only changes of commit 7b2a3887de - Show all commits

View File

@ -6,6 +6,7 @@ using Marco.Pms.Model.Projects;
using Marco.Pms.Model.Utilities;
using Marco.Pms.Model.ViewModels.DashBoard;
using Marco.Pms.Services.Service;
using Marco.Pms.Services.Service.ServiceInterfaces;
using MarcoBMS.Services.Helpers;
using MarcoBMS.Services.Service;
using Microsoft.AspNetCore.Authorization;
@ -21,15 +22,15 @@ namespace Marco.Pms.Services.Controllers
{
private readonly ApplicationDbContext _context;
private readonly UserHelper _userHelper;
private readonly ProjectsHelper _projectsHelper;
private readonly IProjectServices _projectServices;
private readonly ILoggingService _logger;
private readonly PermissionServices _permissionServices;
public static readonly Guid ActiveId = Guid.Parse("b74da4c2-d07e-46f2-9919-e75e49b12731");
public DashboardController(ApplicationDbContext context, UserHelper userHelper, ProjectsHelper projectsHelper, ILoggingService logger, PermissionServices permissionServices)
public DashboardController(ApplicationDbContext context, UserHelper userHelper, IProjectServices projectServices, ILoggingService logger, PermissionServices permissionServices)
{
_context = context;
_userHelper = userHelper;
_projectsHelper = projectsHelper;
_projectServices = projectServices;
_logger = logger;
_permissionServices = permissionServices;
}
@ -182,11 +183,13 @@ namespace Marco.Pms.Services.Controllers
// --- Step 1: Get the list of projects the user can access ---
// This query is more efficient as it only selects the IDs needed.
var projects = await _projectsHelper.GetMyProjects(tenantId, loggedInEmployee);
var accessibleActiveProjectIds = projects
.Where(p => p.ProjectStatusId == ActiveId)
var projects = await _projectServices.GetMyProjectIdsAsync(tenantId, loggedInEmployee);
var accessibleActiveProjectIds = await _context.Projects
.Where(p => p.ProjectStatusId == ActiveId && projects.Contains(p.Id))
.Select(p => p.Id)
.ToList();
.ToListAsync();
if (!accessibleActiveProjectIds.Any())
{
_logger.LogInfo("User {UserId} has no accessible active projects.", loggedInEmployee.Id);
@ -199,7 +202,7 @@ namespace Marco.Pms.Services.Controllers
if (projectId.HasValue)
{
// Security Check: Ensure the requested project is in the user's accessible list.
var hasPermission = await _permissionServices.HasProjectPermission(loggedInEmployee, projectId.Value.ToString());
var hasPermission = await _permissionServices.HasProjectPermission(loggedInEmployee, projectId.Value);
if (!hasPermission)
{
_logger.LogWarning("Access DENIED for user {UserId} on project {ProjectId} (not active or not accessible).", loggedInEmployee.Id, projectId.Value);
@ -250,7 +253,7 @@ namespace Marco.Pms.Services.Controllers
}
catch (Exception ex)
{
_logger.LogError("An unexpected error occurred in GetTotalEmployees for projectId {ProjectId} \n {Error}", projectId ?? Guid.Empty, ex.Message);
_logger.LogError(ex, "An unexpected error occurred in GetTotalEmployees for projectId {ProjectId}", projectId ?? Guid.Empty);
return StatusCode(500, ApiResponse<object>.ErrorResponse("An internal server error occurred.", null, 500));
}
}
@ -281,7 +284,7 @@ namespace Marco.Pms.Services.Controllers
// --- Logic for a SINGLE Project ---
// 2a. Security Check: Verify permission for the specific project.
var hasPermission = await _permissionServices.HasProjectPermission(loggedInEmployee, projectId.Value.ToString());
var hasPermission = await _permissionServices.HasProjectPermission(loggedInEmployee, projectId.Value);
if (!hasPermission)
{
_logger.LogWarning("Access DENIED for user {UserId} on project {ProjectId}.", loggedInEmployee.Id, projectId.Value);
@ -301,8 +304,8 @@ namespace Marco.Pms.Services.Controllers
// --- Logic for ALL Accessible Projects ---
// 2c. Get a list of all projects the user is allowed to see.
var accessibleProject = await _projectsHelper.GetMyProjects(tenantId, loggedInEmployee);
var accessibleProjectIds = accessibleProject.Select(p => p.Id).ToList();
var accessibleProjectIds = await _projectServices.GetMyProjectIdsAsync(tenantId, loggedInEmployee);
if (!accessibleProjectIds.Any())
{
_logger.LogInfo("User {UserId} has no accessible projects.", loggedInEmployee.Id);
@ -341,7 +344,7 @@ namespace Marco.Pms.Services.Controllers
}
catch (Exception ex)
{
_logger.LogError("An unexpected error occurred in GetTotalTasks for projectId {ProjectId} \n {Error}", projectId ?? Guid.Empty, ex.Message);
_logger.LogError(ex, "An unexpected error occurred in GetTotalTasks for projectId {ProjectId}", projectId ?? Guid.Empty);
return StatusCode(500, ApiResponse<object>.ErrorResponse("An internal server error occurred.", null, 500));
}
}