public async Task <OperationResult <UserDTO> > Add(UserRegister newUser)
        {
            var userRepository = _sqlUnitOfWork.GetRepository <IUserSQLServerRepository>();
            var isUserExist    = userRepository.Get(element => element.Email.Equals(newUser.Email)).Data.Count != 0;
            var result         = new OperationResult <UserDTO>();

            if (!isUserExist)
            {
                var id             = Guid.NewGuid();
                var activationHash = PasswordHasher.ActivationHash();
                var passwordSalt   = PasswordHasher.Hash(newUser.Password);
                var user           = _mapper.Map <User>(newUser);

                user.Id             = id;
                user.RoleId         = (int)UserRole.User;
                user.Password       = passwordSalt.Hash;
                user.Salt           = passwordSalt.Salt;
                user.ActivationCode = activationHash;

                var userResult = userRepository.Add(user);
                _sqlUnitOfWork.Save();
                var userData = userRepository.GetUserWithRole(userResult.Data.Email);

                result.Errors = userResult.Errors;
                result.Data   = _mapper.Map <UserDTO>(userData.Data);
                result.Type   = userResult.Type;

                if (userResult.IsSuccess)
                {
                    await SendEmailAsync(userData.Data.Email, userData.Data.ActivationCode);
                }
            }
            else
            {
                result.Errors = new List <string> {
                    "Email is already used"
                };
                result.Type = ResultType.BadRequest;
            }

            return(result);
        }