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));
        }