public async Task <LoginResponseModel> ResetPassword(ResetPasswordWithPhoneRequestModel model)
        {
            var user = _unitOfWork.Repository <ApplicationUser>().Get(x => x.PhoneNumber == model.PhoneNumber)
                       .Include(x => x.VerificationTokens)
                       .FirstOrDefault();

            if (user == null || !user.PhoneNumberConfirmed)
            {
                throw new CustomException(HttpStatusCode.BadRequest, "phoneNumber", "Phone Number is invalid");
            }

            var code = user.VerificationTokens.FirstOrDefault(x => !x.IsUsed && x.IsValid && x.TokenHash == _hashUtility.GetHash(model.Code));

            if (code == null)
            {
                throw new CustomException(HttpStatusCode.BadRequest, "code", "Invalid code");
            }

            await _userManager.ResetPasswordAsync(user, await _userManager.GeneratePasswordResetTokenAsync(user), model.Password);

            code.IsUsed = true;

            _unitOfWork.Repository <ApplicationUser>().Update(user);

            // there is _unitOfWork.SaveChanges call inside BuildLoginResponse
            var loginResponse = await _jwtService.BuildLoginResponse(user);

            return(loginResponse);
        }
        public async Task <IActionResult> ResetPassword([FromBody] ResetPasswordWithPhoneRequestModel model)
        {
            var response = await _accountService.ResetPassword(model);

            return(Json(new JsonResponse <LoginResponseModel>(response)));
        }