From 29ea1698bcc3a22c9ba646b31ee2953fc35cd2d5 Mon Sep 17 00:00:00 2001 From: "ashutosh.nehete" Date: Fri, 13 Jun 2025 16:22:58 +0530 Subject: [PATCH] Implemented signalR in manage Task API --- .../Controllers/ProjectController.cs | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/Marco.Pms.Services/Controllers/ProjectController.cs b/Marco.Pms.Services/Controllers/ProjectController.cs index 0cfd536..d391909 100644 --- a/Marco.Pms.Services/Controllers/ProjectController.cs +++ b/Marco.Pms.Services/Controllers/ProjectController.cs @@ -63,9 +63,9 @@ namespace MarcoBMS.Services.Controllers return Unauthorized(ApiResponse.ErrorResponse("Employee not found.", null, 401)); } - - List projects = await _projectsHelper.GetMyProjects(tenantId, LoggedInEmployee); - + + List projects = await _projectsHelper.GetMyProjects(tenantId, LoggedInEmployee); + // 4. Project projection to ProjectInfoVM // This part is already quite efficient. @@ -88,7 +88,7 @@ namespace MarcoBMS.Services.Controllers return Ok(ApiResponse.SuccessResponse(response, "Success.", 200)); } - + [HttpGet("list")] public async Task GetAll() @@ -518,7 +518,11 @@ namespace MarcoBMS.Services.Controllers if (projectAllocationDot != null) { Guid TenentID = GetTenantId(); + var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); + List? result = new List(); + List employeeIds = new List(); + List projectIds = new List(); foreach (var item in projectAllocationDot) { @@ -547,6 +551,9 @@ namespace MarcoBMS.Services.Controllers projectAllocationFromDb.IsActive = false; _context.Entry(projectAllocationFromDb).Property(e => e.ReAllocationDate).IsModified = true; _context.Entry(projectAllocationFromDb).Property(e => e.IsActive).IsModified = true; + + employeeIds.Add(projectAllocation.EmployeeId); + projectIds.Add(projectAllocation.ProjectId); } await _context.SaveChangesAsync(); var result1 = new @@ -568,15 +575,21 @@ namespace MarcoBMS.Services.Controllers projectAllocation.IsActive = true; _context.ProjectAllocations.Add(projectAllocation); await _context.SaveChangesAsync(); + + employeeIds.Add(projectAllocation.EmployeeId); + projectIds.Add(projectAllocation.ProjectId); } + } catch (Exception ex) { return Ok(ApiResponse.ErrorResponse(ex.Message, ex, 400)); } } + var notification = new { LoggedInUserId = LoggedInEmployee.Id, Keyword = "Assign_Project", ProjectIds = projectIds, EmployeeList = employeeIds }; + await _signalR.Clients.All.SendAsync("NotificationEventHandler", notification); return Ok(ApiResponse.SuccessResponse(result, "Data saved successfully", 200)); } @@ -590,6 +603,7 @@ namespace MarcoBMS.Services.Controllers Guid tenantId = GetTenantId(); var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); List workItems = new List { }; + Building building = new Building(); string responseMessage = ""; if (workItemDot != null) { @@ -597,6 +611,10 @@ namespace MarcoBMS.Services.Controllers { WorkItem workItem = item.ToWorkItemFromWorkItemDto(tenantId); + var workArea = await _context.WorkAreas.Include(a => a.Floor).FirstOrDefaultAsync(a => a.Id == workItem.WorkAreaId) ?? new WorkArea(); + + building = await _context.Buildings.FirstOrDefaultAsync(b => b.Id == (workArea.Floor != null ? workArea.Floor.BuildingId : Guid.Empty)) ?? new Building(); + if (item.Id != null) { //update @@ -621,7 +639,7 @@ namespace MarcoBMS.Services.Controllers var activity = await _context.ActivityMasters.ToListAsync(); var category = await _context.WorkCategoryMasters.ToListAsync(); - var notification = new { LoggedInUserId = LoggedInEmployee.Id, Keyword = "Infra", Response = workItems }; + var notification = new { LoggedInUserId = LoggedInEmployee.Id, Keyword = "Infra", ProjectId = building.ProjectId }; await _signalR.Clients.All.SendAsync("NotificationEventHandler", notification); return Ok(ApiResponse.SuccessResponse(workItems, responseMessage, 200)); @@ -808,7 +826,9 @@ namespace MarcoBMS.Services.Controllers if (projectAllocationDtos != null && employeeId != Guid.Empty) { Guid TenentID = GetTenantId(); + var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); List? result = new List(); + List projectIds = new List(); foreach (var projectAllocationDto in projectAllocationDtos) { @@ -836,6 +856,8 @@ namespace MarcoBMS.Services.Controllers projectAllocationFromDb.IsActive = false; _context.Entry(projectAllocationFromDb).Property(e => e.ReAllocationDate).IsModified = true; _context.Entry(projectAllocationFromDb).Property(e => e.IsActive).IsModified = true; + + projectIds.Add(projectAllocation.ProjectId); } await _context.SaveChangesAsync(); var result1 = new @@ -858,6 +880,8 @@ namespace MarcoBMS.Services.Controllers _context.ProjectAllocations.Add(projectAllocation); await _context.SaveChangesAsync(); + projectIds.Add(projectAllocation.ProjectId); + } @@ -868,6 +892,9 @@ namespace MarcoBMS.Services.Controllers return Ok(ApiResponse.ErrorResponse(ex.Message, ex, 400)); } } + var notification = new { LoggedInUserId = LoggedInEmployee.Id, Keyword = "Assign_Project", ProjectIds = projectIds, EmployeeId = employeeId }; + + await _signalR.Clients.All.SendAsync("NotificationEventHandler", notification); return Ok(ApiResponse.SuccessResponse(result, "Data saved successfully", 200)); }