public async Task <Result <User> > RegisterUserAsync(UserRegistrationDTO userRegistrationDTO) { var existingUserResult = await _userRepository.GetUserByPhoneNumber(userRegistrationDTO.PhoneNumber); if (existingUserResult.IsSuccessed) { return(Result.Fail <User>(UserErrorMessages.User_Already_Exists_With_Given_Phone_Number)); } var userResult = await _userFactory.CreateUserAsync(userRegistrationDTO); if (!userResult.IsSuccessed) { return(Result.Fail <User>(userResult.GetErrorString())); } _userRepository.Create(userResult.Value); var saveResult = await _userRepository.SaveChangesAsync(Failed_To_Save_User); if (!saveResult.IsSuccessed) { return(Result.Fail <User>(saveResult.GetErrorString())); } _mediator.Publish(new UserCreated(userResult.Value)); return(Result.Ok(userResult.Value)); }