public AuthenticatedViewModel Login(string email, string password)
        {
            if (string.IsNullOrEmpty(email))
            {
                throw new DomainException(ErrorMessage.UserEmailIsEmpty);
            }
            if (string.IsNullOrEmpty(password))
            {
                throw new DomainException(ErrorMessage.PasswordIsRequired);
            }

            var user = _systemUserRepository.GetAll(x => x.Email == email).FirstOrDefault();

            if (user == null)
            {
                throw new DomainException(ErrorMessage.UserIsNotExist);
            }
            if (!user.IsActive)
            {
                throw new DomainException(ErrorMessage.UserWasDisabled);
            }

            if (!PasswordHasher.ValidateHash(password, user.PasswordHash))
            {
                throw new DomainException(ErrorMessage.UserLoginFault);
            }



            using (var unitOfWork = _unitOfWorkFactory.GetCurrentUnitOfWork())
            {
                var authenticationToken = SHA256Hash.CreateHash(Guid.NewGuid().ToString());
                user.UpdateLogin(authenticationToken, _timeSource.LocalNow());


                _systemUserRepository.Edit(user);
                unitOfWork.Commit();

                _cacheManager.Add(authenticationToken, user.Id);
                var authenticatedViewModel = new AuthenticatedViewModel
                {
                    Id    = user.Id,
                    Name  = user.Name,
                    Email = user.Email,
                    AuthenticationToken = authenticationToken,
                    SystemRoleName      = user.SystemRole.Name,
                    SystemRoleId        = user.SystemRoleId
                };

                _cacheManager.Add(user.Id.ToString(), authenticatedViewModel);
                return(authenticatedViewModel);
            }
        }