From 303f3267739fad575f93e7c96b40eb9fe3c9001b Mon Sep 17 00:00:00 2001 From: "ashutosh.nehete" Date: Wed, 18 Jun 2025 12:00:35 +0530 Subject: [PATCH] Implemented signalR in Employee module --- .../Controllers/EmployeeController.cs | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/Marco.Pms.Services/Controllers/EmployeeController.cs b/Marco.Pms.Services/Controllers/EmployeeController.cs index 30ac36d..93580dd 100644 --- a/Marco.Pms.Services/Controllers/EmployeeController.cs +++ b/Marco.Pms.Services/Controllers/EmployeeController.cs @@ -9,11 +9,13 @@ using Marco.Pms.Model.Mapper; using Marco.Pms.Model.Projects; using Marco.Pms.Model.Utilities; using Marco.Pms.Model.ViewModels.Employee; +using Marco.Pms.Services.Hubs; using MarcoBMS.Services.Helpers; using MarcoBMS.Services.Service; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.SignalR; using Microsoft.EntityFrameworkCore; namespace MarcoBMS.Services.Controllers @@ -32,9 +34,11 @@ namespace MarcoBMS.Services.Controllers private readonly UserHelper _userHelper; private readonly IConfiguration _configuration; private readonly ILoggingService _logger; + private readonly IHubContext _signalR; public EmployeeController(UserManager userManager, IEmailSender emailSender, - ApplicationDbContext context, EmployeeHelper employeeHelper, UserHelper userHelper, IConfiguration configuration, ILoggingService logger) + ApplicationDbContext context, EmployeeHelper employeeHelper, UserHelper userHelper, IConfiguration configuration, ILoggingService logger, + IHubContext signalR) { _context = context; _userManager = userManager; @@ -43,6 +47,7 @@ namespace MarcoBMS.Services.Controllers _userHelper = userHelper; _configuration = configuration; _logger = logger; + _signalR = signalR; } [HttpGet] @@ -154,6 +159,8 @@ namespace MarcoBMS.Services.Controllers public async Task CreateUser([FromBody] CreateUserDto model) { Guid tenantId = _userHelper.GetTenantId(); + var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); + Guid employeeId = Guid.Empty; if (model == null) return BadRequest(ApiResponse.ErrorResponse("Invalid data", "Invaild Data", 400)); @@ -180,6 +187,7 @@ namespace MarcoBMS.Services.Controllers _context.Employees.Update(existingEmployee); await _context.SaveChangesAsync(); + employeeId = existingEmployee.Id; responsemessage = "User updated successfully."; } else @@ -214,7 +222,7 @@ namespace MarcoBMS.Services.Controllers _context.Employees.Add(newEmployee); await _context.SaveChangesAsync(); - + employeeId = newEmployee.Id; /* SEND USER REGISTRATION MAIL*/ var token = await _userManager.GeneratePasswordResetTokenAsync(user); @@ -233,6 +241,7 @@ namespace MarcoBMS.Services.Controllers _context.Employees.Update(existingEmployee); await _context.SaveChangesAsync(); + employeeId = existingEmployee.Id; /* SEND USER REGISTRATION MAIL*/ var token = await _userManager.GeneratePasswordResetTokenAsync(user); @@ -256,17 +265,22 @@ namespace MarcoBMS.Services.Controllers existingEmployee = GetUpdateEmployeeModel(model, existingEmployee); _context.Employees.Update(existingEmployee); responsemessage = "User updated successfully."; + employeeId = existingEmployee.Id; } else { // Create Employee record if missing Employee newEmployee = GetNewEmployeeModel(model, tenantId, string.Empty); _context.Employees.Add(newEmployee); + employeeId = newEmployee.Id; } await _context.SaveChangesAsync(); responsemessage = "User created successfully."; } + var notification = new { LoggedInUserId = LoggedInEmployee.Id, Keyword = "Employee", EmployeeId = employeeId }; + + await _signalR.Clients.All.SendAsync("NotificationEventHandler", notification); return Ok(ApiResponse.SuccessResponse("Success.", responsemessage, 200)); } @@ -420,6 +434,9 @@ namespace MarcoBMS.Services.Controllers } await _context.SaveChangesAsync(); _logger.LogInfo("Employee with ID {EmployeId} Deleted successfully", employee.Id); + var notification = new { LoggedInUserId = LoggedEmployee.Id, Keyword = "Employee", EmployeeId = employee.Id }; + + await _signalR.Clients.All.SendAsync("NotificationEventHandler", notification); } } else