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); }