public User Login(UserLogin model, IBusinessErrorCollection errors)
        {
            if (!model.Validate(errors))
            {
                return null;
            }

            var user = UserManager.Find(model.Email, model.Password);
            if (user == null)
            {
                errors.Add("", "Invalid email or password");
                return null;
            }

            user.DateLastLogin = DateTime.Now;
            UnitOfWork.SaveChanges();

            return user;
        }
        public void ResetPassword(ResetPassword model, IBusinessErrorCollection errors)
        {
            if (!model.Validate(errors))
            {
                return;
            }

            var result = UserManager.PasswordValidator.ValidateAsync(model.Password).GetAwaiter().GetResult();
            if (!result.Succeeded)
            {
                errors.AddErrorsFromResult(result);
                return;
            }

            result = UserManager.ResetPassword(model.UserId, model.Code, model.Password);
            if (!result.Succeeded)
            {
                errors.AddErrorsFromResult(result);
                return;
            }
        }
        public void RecoverPassword(PasswordRecover model, IBusinessErrorCollection errors)
        {
            if (!model.Validate(errors))
            {
                return;
            }

            var user = UserManager.FindByEmail(model.Email);
            if (user == null)
            {
                errors.Add("", "Invalid email");
                return;
            }

            var code = UserManager.GeneratePasswordResetToken(user.Id);

            var recoverUrl = string.Format(model.LinkTemplate,
                Uri.EscapeDataString(user.Id),
                Uri.EscapeDataString(code));

            Emailer.SendPasswordRecoveryEmail(user.Email, recoverUrl);
        }