public Task <BaseResponse <Int64> > Handle(CreateUserCommand request, CancellationToken cancellationToken) { var response = new BaseResponse <Int64>(); response.Success = false; try { if (request.Update) { var validator = new UpdateUserCommandValidator(); var validationResult = validator.ValidateAsync(request).Result; if (validationResult.Errors.Count > 0) { response.ValidationErrors = new List <string>(); foreach (var error in validationResult.Errors) { response.ValidationErrors.Add(error.ErrorMessage); } response.Message = String.Join("\n", response.ValidationErrors); return(Task.FromResult(response)); } } else { var validator = new CreateUserCommandValidator(_userRepository); var validationResult = validator.ValidateAsync(request).Result; if (validationResult.Errors.Count > 0) { response.ValidationErrors = new List <string>(); foreach (var error in validationResult.Errors) { response.ValidationErrors.Add(error.ErrorMessage); } response.Message = String.Join("\n", response.ValidationErrors); return(Task.FromResult(response)); } } var user = _mapper.Map <User>(request); if (user == null) { response.Message = "User Mapping Failed"; return(Task.FromResult(response)); } if (request.Update) { var userFromDb = _userRepository.GetById(request.Id, false); user.Password = userFromDb.Password; bool updated = _userRepository.UpdateUserWithSp(user); var address = _mapper.Map <UserAddress>(request); //if (address == null) //{ // response.Message = "Address Mapping Failed"; // return response; //} var prefernce = _mapper.Map <UserPreferences>(request); //if (prefernce == null) //{ // response.Message = "Prefernce Mapping Failed"; // return response; //} if (address != null) { var addressFromDb = _userAddressRepository.GetByUserId(request.Id); address.UserId = request.Id; if (addressFromDb != null) { address.Id = addressFromDb.Id; _userAddressRepository.CreateOrUpdate(address); } else { address.Id = 0; _userAddressRepository.CreateOrUpdate(address); } } if (prefernce != null) { var preferenceFromDb = _userPreferencesRepository.GetByUserId(request.Id); prefernce.UserId = request.Id; if (preferenceFromDb != null) { prefernce.Id = preferenceFromDb.Id; _userPreferencesRepository.CreateOrUpdate(prefernce); } else { prefernce.Id = 0; _userPreferencesRepository.CreateOrUpdate(prefernce); } } response.Message = "Profile updated successfully"; response.Success = true; } else { user.Password = encryptDecryptManager.Encrypt(user.Password); // var savedUser = _userRepository.AddAsync(user).Result; var savedUser = _userRepository.SignupWithSp(user); if (savedUser != null && savedUser.Id > 0) { response.Data = savedUser.Id; response.Message = "Registration Successful"; response.Success = true; SendRegistrationSuccessMail(savedUser.Id, savedUser.Email); // Hangfire call //BackgroundJob.Enqueue(() => SendRegistrationSuccessMail(savedUser.Id,savedUser.Email)); } else { response.Message = "User save failed"; } } } catch (Exception e) { _logger.LogError($"Exception occured: {e.Message}"); response.Message = e.Message.ToString(); response.Success = false; } return(Task.FromResult(response)); }