@Transactional(readOnly = true)
    public UserSyncDto isSignUpAllowed(String phone) {
        Optional<User> user = userService.readUserByPhone(phone);

        if (!isExistUser(user)) {
            log.info("회원가입 이력이 없는 사용자입니다. phone: {}", phone);
            return UserSyncDto.signUpAllowed();
        }

        if (isGeneralSignUpUser(user.get())) {
            log.warn("이미 회원가입된 사용자입니다. user: {}", user.get());
            return UserSyncDto.abort(user.get().getId(), user.get().getUsername());
        }

        log.info("소셜 회원가입 사용자입니다. user: {}", user.get());
        return UserSyncDto.of(true, true, user.get().getId(), user.get().getUsername());
    }
@DisplayName("일반 회원가입 시, 이미 일반회원 가입된 회원인 경우 계정 생성 불가 응답을 반환한다.")
    @Test
    void isSignedUserWhenGeneralThrowUserErrorException() {
        // given
        given(userService.readUserByPhone(phone)).willReturn(Optional.of(UserFixture.GENERAL_USER.toUser()));

        // when
        UserSyncDto userSync = userGeneralSignService.isSignUpAllowed(phone);

        // then
        assertFalse(userSync.isSignUpAllowed());
        assertTrue(userSync.isExistAccount());
        assertEquals(UserFixture.GENERAL_USER.getUsername(), userSync.username());
    }