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

            _query = null;
            EmailVerificationDataModel item = _result.FirstOrDefault();

            _result = null;
            if (item != null)
            {
                if (!item.IsVerified)
                {
                    if (_uDateTimeDifference.CheckTimeIsExpiredDays(DateTime.Now, item.AddedDate, 24))
                    {
                        return(new UserShortProfileViewModel {
                            Status = false, Messsage = UMessagesInfo.TokenExpired
                        });
                    }
                    else
                    {
                        //update verification in database
                        item.IsVerified       = true;
                        item.VerificationDate = DateTime.Now;
                        await _unitOfWork.EmailVerificatioRepository.Update(item);

                        return(await _userService.GetUserShortProfileById(item.User.Id));
                    }
                }
                else
                {
                    return(new UserShortProfileViewModel {
                        Status = false, Messsage = UMessagesInfo.TokenAlreadyUsed
                    });
                }
            }
            return(new UserShortProfileViewModel {
                Status = false, Messsage = UMessagesInfo.TokenNotExists
            });
        }
        public async Task <BaseModel> SendEmailVerification(long Id, string HtmlBody, string verificationActionPath, string Name)
        {
            bool _actionStatus = false;
            UsersLoginDataModel usersLoginData = await _unitOfWork.UserLoginRepository.GetByID(Id);

            if (usersLoginData == null)
            {
                return(new BaseModel {
                    Status = false, Messsage = UMessagesInfo.WrongUserName
                });
            }
            string token = Guid.NewGuid().ToString().Replace("-", "");

            var _resultEmailVerification = await _unitOfWork.EmailVerificatioRepository.FindAllBy(c => c.User.Id == Id);

            if (_resultEmailVerification.Count != 0)
            {
                var emailVerificationUpdateModel = _resultEmailVerification.FirstOrDefault();
                emailVerificationUpdateModel.VerificationCode = token;
                emailVerificationUpdateModel.IsVerified       = false;
                await _unitOfWork.EmailVerificatioRepository.Update(emailVerificationUpdateModel);

                _actionStatus = true;
            }
            else
            {
                EmailVerificationDataModel emailVerificationModel = new EmailVerificationDataModel
                {
                    User             = usersLoginData,
                    EmailAddress     = usersLoginData.UserName,
                    IsVerified       = false,
                    VerificationCode = token
                };
                await _unitOfWork.EmailVerificatioRepository.Insert(emailVerificationModel);

                _actionStatus = true;
            }

            if (_actionStatus)
            {
                //active user profile on email verification
                usersLoginData.IsActive  = true;
                usersLoginData.UpdatedBy = Id;
                usersLoginData.CreatedBy = Id;
                await _unitOfWork.UserLoginRepository.Update(usersLoginData);

                //set user information in verification email message
                string messageBody = string.Format(HtmlBody,
                                                   verificationActionPath + token,
                                                   Name,
                                                   usersLoginData.UserName
                                                   );

                await _emailSender.SendEmailAsync(
                    UMessagesInfo.VerificationEmailSubject,
                    messageBody,
                    usersLoginData.UserName,
                    _sphixConfiguration.SupportEmail,
                    UMessagesInfo.SphixSupport
                    );

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