public async Task <UserShortProfileViewModel> ValidateTokenAsync(string token)
        {
            IQueryable <RestPasswordLinkDataModel> _query  = _unitOfWork.RestPasswordLinkRepository.FindAllByQuery(c => c.VerificationCode == token);
            IList <RestPasswordLinkDataModel>      _result = await _query.Include("User").ToListAsync();

            RestPasswordLinkDataModel _forgotPasswordDetail = _result.FirstOrDefault();

            _result = null;
            if (_forgotPasswordDetail != null)
            {
                if (_forgotPasswordDetail.IsRequestToRestPassword && _forgotPasswordDetail.IsRequestHasUsed == false)
                {
                    //_forgotPasswordDetail.IsRequestHasUsed = true;
                    //_forgotPasswordDetail.IsRequestToRestPassword = false;
                    //_forgotPasswordDetail.VerificationDate = DateTime.Now;
                    // await _unitOfWork.RestPasswordLinkRepository.Update(_forgotPasswordDetail);
                    return(await _userService.GetUserShortProfileById(_forgotPasswordDetail.User.Id));
                }
                else
                {
                    return(new UserShortProfileViewModel {
                        Status = false, Messsage = UMessagesInfo.TokenAlreadyUsed
                    });
                }
            }
            return(new UserShortProfileViewModel {
                Status = false, Messsage = UMessagesInfo.TokenNotExists
            });
        }
        public async Task <BaseModel> SendForgotPasswordLinkAsync(string UserName, string HtmlBody, string verificationActionPath)
        {
            IList <UsersLoginDataModel> users = await _unitOfWork.UserLoginRepository.FindAllBy(c => c.UserName.ToLower() == UserName);

            UsersLoginDataModel userData = users.FirstOrDefault();

            if (userData != null)
            {
                string token = Guid.NewGuid().ToString().Replace("-", "");
                RestPasswordLinkDataModel resetPasswordModel = new RestPasswordLinkDataModel {
                    IsRequestHasUsed        = false,
                    IsRequestToRestPassword = true,
                    User             = userData,
                    VerificationCode = token
                };
                var _data = await _unitOfWork.UserProfileRepository.FindAllBy(c => c.User.Id == userData.Id);

                if (_data != null)
                {
                    var resetPasswordExistingDetail = await _unitOfWork.RestPasswordLinkRepository.FindAllBy(c => c.User == userData);

                    RestPasswordLinkDataModel resetPasswordUpdateModel = resetPasswordExistingDetail.FirstOrDefault();
                    if (resetPasswordUpdateModel == null)
                    {
                        await _unitOfWork.RestPasswordLinkRepository.Insert(resetPasswordModel);
                    }
                    else
                    {
                        resetPasswordUpdateModel.IsRequestToRestPassword = true;
                        resetPasswordUpdateModel.IsRequestHasUsed        = false;
                        resetPasswordUpdateModel.VerificationCode        = token;
                        await _unitOfWork.RestPasswordLinkRepository.Update(resetPasswordUpdateModel);
                    }

                    string messageBody = string.Format(HtmlBody,
                                                       verificationActionPath + token,
                                                       _data.FirstOrDefault().FirstName + ' ' + _data.FirstOrDefault().LastName,
                                                       userData.UserName
                                                       );

                    await _emailSender.SendEmailAsync(
                        UMessagesInfo.ResetPasswordSubject,
                        messageBody,
                        userData.UserName,
                        _sphixConfiguration.SupportEmail,
                        UMessagesInfo.SphixSupport
                        );

                    return(new BaseModel {
                        Status = true, Messsage = UMessagesInfo.ResetPasswordLinkSentOnMail
                    });
                }

                return(new BaseModel {
                    Status = false, Messsage = UMessagesInfo.UserNameNotExist
                });
            }
            return(new BaseModel {
                Status = false, Messsage = UMessagesInfo.UserNameNotExist
            });
        }