From 391d79af3e81c2824b962df6fd9f7593591b7672 Mon Sep 17 00:00:00 2001 From: "ashutosh.nehete" Date: Tue, 2 Sep 2025 16:05:08 +0530 Subject: [PATCH] Created the structure for project-level-permissions APIs --- .../Controllers/DocumentController.cs | 4 +-- .../Controllers/ProjectController.cs | 26 ++++++++++++++++++- Marco.Pms.Services/Service/ProjectServices.cs | 15 +++++++++-- .../ServiceInterfaces/IProjectServices.cs | 6 +++++ 4 files changed, 46 insertions(+), 5 deletions(-) diff --git a/Marco.Pms.Services/Controllers/DocumentController.cs b/Marco.Pms.Services/Controllers/DocumentController.cs index c06e923..909ce53 100644 --- a/Marco.Pms.Services/Controllers/DocumentController.cs +++ b/Marco.Pms.Services/Controllers/DocumentController.cs @@ -423,8 +423,8 @@ namespace Marco.Pms.Services.Controllers .ThenInclude(da => da!.UpdatedBy) .Where(av => av.ParentAttachmentId == parentAttachmentId && av.TenantId == tenantId); - var totalPages = await versionMappingsQuery.CountAsync(); - var totalCount = totalPages / pageSize; + var totalCount = await versionMappingsQuery.CountAsync(); + var totalPages = totalCount / pageSize; var versionMappings = await versionMappingsQuery .OrderByDescending(da => da.ChildAttachment!.UploadedAt) diff --git a/Marco.Pms.Services/Controllers/ProjectController.cs b/Marco.Pms.Services/Controllers/ProjectController.cs index 436dff9..bb993c2 100644 --- a/Marco.Pms.Services/Controllers/ProjectController.cs +++ b/Marco.Pms.Services/Controllers/ProjectController.cs @@ -1,4 +1,5 @@ using Marco.Pms.Model.Dtos.Project; +using Marco.Pms.Model.Dtos.Util; using Marco.Pms.Model.Employees; using Marco.Pms.Model.Utilities; using Marco.Pms.Services.Service.ServiceInterfaces; @@ -454,5 +455,28 @@ namespace MarcoBMS.Services.Controllers #endregion + [HttpPost("assign/project-level-permission")] + + public async Task ManageProjectLevelPermission([FromBody] ProjctLevelPermissionDto model) + { + Employee loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); + var response = await _projectServices.ManageProjectLevelPermissionAsync(model, tenantId, loggedInEmployee); + return StatusCode(response.StatusCode, response); + } + [HttpGet("get/project-level-permission/employee/{employeeId}/prject/{projectId}")] + public async Task GetAssignedProjectLevelPermission(Guid employeeId, Guid projectId) + { + Employee loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); + var response = await _projectServices.GetAssignedProjectLevelPermissionAsync(employeeId, projectId, tenantId, loggedInEmployee); + return StatusCode(response.StatusCode, response); + } + [HttpGet("get/proejct-level/modules")] + public async Task AssignProjectLevelModules() + { + Employee loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); + var response = await _projectServices.AssignProjectLevelModulesAsync(tenantId, loggedInEmployee); + return StatusCode(response.StatusCode, response); + } + } -} \ No newline at end of file +}; \ No newline at end of file diff --git a/Marco.Pms.Services/Service/ProjectServices.cs b/Marco.Pms.Services/Service/ProjectServices.cs index 3f278a0..4753988 100644 --- a/Marco.Pms.Services/Service/ProjectServices.cs +++ b/Marco.Pms.Services/Service/ProjectServices.cs @@ -1473,7 +1473,9 @@ namespace Marco.Pms.Services.Service var employeeTask = Task.Run(async () => { await using var context = await _dbContextFactory.CreateDbContextAsync(); - return await context.ProjectAllocations.FirstOrDefaultAsync(e => e.Id == model.EmployeeId && e.TenantId == tenantId && e.IsActive); + return await context.ProjectAllocations.Include(pa => pa.Employee) + .Where(pa => pa.EmployeeId == model.EmployeeId && pa.ProjectId == model.ProjectId && pa.TenantId == tenantId && pa.IsActive) + .Select(pa => pa.Employee).FirstOrDefaultAsync(); }); var projectTask = Task.Run(async () => { @@ -1492,7 +1494,16 @@ namespace Marco.Pms.Services.Service } public async Task> AssignProjectLevelModulesAsync(Guid tenantId, Employee loggedInEmployee) { - return ApiResponse.SuccessResponse(""); + var moduleList = new Guid[] + { + Guid.Parse("53176ebf-c75d-42e5-839f-4508ffac3def"), + Guid.Parse("9d4b5489-2079-40b9-bd77-6e1bf90bc19f"), + Guid.Parse("81ab8a87-8ccd-4015-a917-0627cee6a100"), + Guid.Parse("52c9cf54-1eb2-44d2-81bb-524cf29c0a94"), + Guid.Parse("a8cf4331-8f04-4961-8360-a3f7c3cc7462") + }; + var featurePermissions = await _context.FeaturePermissions.Include(fp => fp.Feature).Where(fp => moduleList.Contains(fp.Id) && fp.IsEnabled).ToListAsync(); + return ApiResponse.SuccessResponse(featurePermissions); } #endregion diff --git a/Marco.Pms.Services/Service/ServiceInterfaces/IProjectServices.cs b/Marco.Pms.Services/Service/ServiceInterfaces/IProjectServices.cs index a1f78f8..1a8aa35 100644 --- a/Marco.Pms.Services/Service/ServiceInterfaces/IProjectServices.cs +++ b/Marco.Pms.Services/Service/ServiceInterfaces/IProjectServices.cs @@ -1,4 +1,5 @@ using Marco.Pms.Model.Dtos.Project; +using Marco.Pms.Model.Dtos.Util; using Marco.Pms.Model.Employees; using Marco.Pms.Model.Projects; using Marco.Pms.Model.Utilities; @@ -34,5 +35,10 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces Task> GetTeamByProject(Guid TenantId, Guid ProjectId, bool IncludeInactive); Task> GetMyProjectIdsAsync(Guid tenantId, Employee LoggedInEmployee); + + Task> ManageProjectLevelPermissionAsync(ProjctLevelPermissionDto model, Guid tenantId, Employee loggedInEmployee); + Task> GetAssignedProjectLevelPermissionAsync(Guid employeeId, Guid projectId, Guid tenantId, Employee loggedInEmployee); + Task> AssignProjectLevelModulesAsync(Guid tenantId, Employee loggedInEmployee); + } }