From 2af750fbb353c05aa6aeff80db36de986ece66f9 Mon Sep 17 00:00:00 2001 From: "ashutosh.nehete" Date: Wed, 16 Apr 2025 10:21:53 +0530 Subject: [PATCH] Fixed the employee duplication bug while adding the email to employee that does not have one --- .../Controllers/EmployeeController.cs | 54 ++++++++++++++----- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/Marco.Pms.Services/Controllers/EmployeeController.cs b/Marco.Pms.Services/Controllers/EmployeeController.cs index bde958c..d515660 100644 --- a/Marco.Pms.Services/Controllers/EmployeeController.cs +++ b/Marco.Pms.Services/Controllers/EmployeeController.cs @@ -191,6 +191,7 @@ namespace MarcoBMS.Services.Controllers [HttpPost("manage")] public async Task CreateUser([FromForm] CreateUserDto model) { + int tenantId = _userHelper.GetTenantId(); if (model == null) return BadRequest(ApiResponse.ErrorResponse("Invalid data", "Invaild Data", 400)); @@ -201,12 +202,14 @@ namespace MarcoBMS.Services.Controllers { // Check if user already exists by email IdentityUser? existingUser = await _userHelper.GetRegisteredUser(model.Email); + var existingEmployee = await _context.Employees.FirstOrDefaultAsync(e => e.Id == model.Id); + if (existingUser != null) { /* Identity user Exists - Create/update employee Employee */ // Update Employee record - var existingEmployee = await _context.Employees.FirstOrDefaultAsync(e => e.Email == model.Email && e.Id == model.Id); + existingEmployee = await _context.Employees.FirstOrDefaultAsync(e => e.Email == model.Email && e.Id == model.Id); if (existingEmployee != null) { existingEmployee = GetUpdateEmployeeModel(model, existingEmployee, existingUser); @@ -231,7 +234,9 @@ namespace MarcoBMS.Services.Controllers { UserName = model.Email, Email = model.Email, - EmailConfirmed = true + EmailConfirmed = true, + TenantId = tenantId + }; // Create Identity User @@ -239,19 +244,42 @@ namespace MarcoBMS.Services.Controllers if (!result.Succeeded) return Ok(ApiResponse.ErrorResponse("Failed to create user", result.Errors, 400)); - Employee newEmployee = GetNewEmployeeModel(model, TenantId, user.Id); - _context.Employees.Add(newEmployee); - - await _context.SaveChangesAsync(); - - - /* SEND USER REGISTRATION MAIL*/ - var token = await _userManager.GeneratePasswordResetTokenAsync(user); - var resetLink = $"{_configuration["AppSettings:WebFrontendUrl"]}/reset-password?token={WebUtility.UrlEncode(token)}"; - if (newEmployee.FirstName != null) + if (existingEmployee == null) { - await _emailSender.SendResetPasswordEmailOnRegister(user.Email, newEmployee.FirstName, resetLink); + Employee newEmployee = GetNewEmployeeModel(model, TenantId, user.Id); + _context.Employees.Add(newEmployee); + + await _context.SaveChangesAsync(); + + + /* SEND USER REGISTRATION MAIL*/ + var token = await _userManager.GeneratePasswordResetTokenAsync(user); + var resetLink = $"{_configuration["AppSettings:WebFrontendUrl"]}/reset-password?token={WebUtility.UrlEncode(token)}"; + if (newEmployee.FirstName != null) + { + await _emailSender.SendResetPasswordEmailOnRegister(user.Email, newEmployee.FirstName, resetLink); + } + } + else + { + existingEmployee.Email = model.Email; + existingEmployee = GetUpdateEmployeeModel(model, existingEmployee, existingUser); + + _context.Employees.Update(existingEmployee); + await _context.SaveChangesAsync(); + + + /* SEND USER REGISTRATION MAIL*/ + var token = await _userManager.GeneratePasswordResetTokenAsync(user); + var resetLink = $"{_configuration["AppSettings:WebFrontendUrl"]}/reset-password?token={WebUtility.UrlEncode(token)}"; + if (existingEmployee.FirstName != null) + { + await _emailSender.SendResetPasswordEmailOnRegister(user.Email, existingEmployee.FirstName, resetLink); + } + + } + responsemessage = "User created successfully. Password reset link is sent to registered email"; }