소셜 로그인, 회원가입 - 이메일 체크 로직 수정 #303
@@ -62,7 +62,6 @@ interface MemberQueryRepository {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    fun getMemberProfile(memberId: Long, myMemberId: Long): GetMemberProfileResponse
 | 
					    fun getMemberProfile(memberId: Long, myMemberId: Long): GetMemberProfileResponse
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fun existsByEmail(email: String): Boolean
 | 
					 | 
				
			||||||
    fun existsByNickname(nickname: String): Boolean
 | 
					    fun existsByNickname(nickname: String): Boolean
 | 
				
			||||||
    fun findNicknamesWithPrefix(prefix: String): List<String>
 | 
					    fun findNicknamesWithPrefix(prefix: String): List<String>
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -486,14 +485,6 @@ class MemberQueryRepositoryImpl(
 | 
				
			|||||||
            .fetchFirst()
 | 
					            .fetchFirst()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    override fun existsByEmail(email: String): Boolean {
 | 
					 | 
				
			||||||
        return queryFactory
 | 
					 | 
				
			||||||
            .selectOne()
 | 
					 | 
				
			||||||
            .from(member)
 | 
					 | 
				
			||||||
            .where(member.email.eq(email))
 | 
					 | 
				
			||||||
            .fetchFirst() != null
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    override fun existsByNickname(nickname: String): Boolean {
 | 
					    override fun existsByNickname(nickname: String): Boolean {
 | 
				
			||||||
        return queryFactory
 | 
					        return queryFactory
 | 
				
			||||||
            .selectOne()
 | 
					            .selectOne()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -286,11 +286,22 @@ class MemberService(
 | 
				
			|||||||
        isAdmin: Boolean = false,
 | 
					        isAdmin: Boolean = false,
 | 
				
			||||||
        isCreator: Boolean = false
 | 
					        isCreator: Boolean = false
 | 
				
			||||||
    ): LoginResponse {
 | 
					    ): LoginResponse {
 | 
				
			||||||
        val member = repository.findByEmail(email = email) ?: throw SodaException("로그인 정보를 확인해주세요.")
 | 
					        val member = repository.findByEmail(email = email) ?: throw SodaException("없는 계정입니다.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!member.isActive) {
 | 
					        if (!member.isActive) {
 | 
				
			||||||
            throw SodaException("탈퇴한 계정입니다.\n고객센터로 문의해 주시기 바랍니다.")
 | 
					            throw SodaException("탈퇴한 계정입니다.\n고객센터로 문의해 주시기 바랍니다.")
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (member.provider != MemberProvider.EMAIL) {
 | 
				
			||||||
 | 
					            val provider = when (member.provider) {
 | 
				
			||||||
 | 
					                MemberProvider.APPLE -> "애플"
 | 
				
			||||||
 | 
					                MemberProvider.GOOGLE -> "구글"
 | 
				
			||||||
 | 
					                else -> "카카오"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            throw SodaException("해당 이메일은 $provider 계정으로 가입되어 있습니다. 해당 소셜 로그인을 사용해 주세요.")
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (isCreator && member.role != MemberRole.CREATOR) {
 | 
					        if (isCreator && member.role != MemberRole.CREATOR) {
 | 
				
			||||||
            throw SodaException("로그인 정보를 확인해주세요.")
 | 
					            throw SodaException("로그인 정보를 확인해주세요.")
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -380,8 +391,23 @@ class MemberService(
 | 
				
			|||||||
    fun duplicateCheckEmail(email: String): ApiResponse<Any> {
 | 
					    fun duplicateCheckEmail(email: String): ApiResponse<Any> {
 | 
				
			||||||
        validateEmail(email)
 | 
					        validateEmail(email)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (repository.existsByEmail(email)) {
 | 
					        val findMember = repository.findByEmail(email)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (findMember != null) {
 | 
				
			||||||
 | 
					            if (findMember.provider == MemberProvider.EMAIL) {
 | 
				
			||||||
                throw SodaException("이미 사용중인 이메일 입니다.", "email")
 | 
					                throw SodaException("이미 사용중인 이메일 입니다.", "email")
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                val provider = when (findMember.provider) {
 | 
				
			||||||
 | 
					                    MemberProvider.APPLE -> "애플"
 | 
				
			||||||
 | 
					                    MemberProvider.GOOGLE -> "구글"
 | 
				
			||||||
 | 
					                    else -> "카카오"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                throw SodaException(
 | 
				
			||||||
 | 
					                    "해당 이메일은 $provider 계정으로 이미 가입되어 있습니다. 해당 소셜 로그인을 사용해 주세요.",
 | 
				
			||||||
 | 
					                    "email"
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return ApiResponse.ok(message = "사용 가능한 이메일 입니다.")
 | 
					        return ApiResponse.ok(message = "사용 가능한 이메일 입니다.")
 | 
				
			||||||
@@ -741,7 +767,14 @@ class MemberService(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Transactional
 | 
					    @Transactional
 | 
				
			||||||
    fun findOrRegister(googleUserInfo: GoogleUserInfo, container: String, marketingPid: String?): Member {
 | 
					    fun findOrRegister(googleUserInfo: GoogleUserInfo, container: String, marketingPid: String?): Member {
 | 
				
			||||||
        repository.findByGoogleId(googleUserInfo.sub)?.let { return it }
 | 
					        val findMember = repository.findByGoogleId(googleUserInfo.sub)
 | 
				
			||||||
 | 
					        if (findMember != null) {
 | 
				
			||||||
 | 
					            if (findMember.isActive) {
 | 
				
			||||||
 | 
					                return findMember
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                throw SodaException("탈퇴한 계정입니다.\n고객센터로 문의해 주시기 바랍니다.")
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        val stipulationTermsOfService = stipulationRepository.findByIdOrNull(StipulationIds.TERMS_OF_SERVICE_ID)
 | 
					        val stipulationTermsOfService = stipulationRepository.findByIdOrNull(StipulationIds.TERMS_OF_SERVICE_ID)
 | 
				
			||||||
            ?: throw SodaException("잘못된 요청입니다\n앱 종료 후 다시 시도해 주세요.")
 | 
					            ?: throw SodaException("잘못된 요청입니다\n앱 종료 후 다시 시도해 주세요.")
 | 
				
			||||||
@@ -749,10 +782,13 @@ class MemberService(
 | 
				
			|||||||
        val stipulationPrivacyPolicy = stipulationRepository.findByIdOrNull(StipulationIds.PRIVACY_POLICY_ID)
 | 
					        val stipulationPrivacyPolicy = stipulationRepository.findByIdOrNull(StipulationIds.PRIVACY_POLICY_ID)
 | 
				
			||||||
            ?: throw SodaException("잘못된 요청입니다\n앱 종료 후 다시 시도해 주세요.")
 | 
					            ?: throw SodaException("잘못된 요청입니다\n앱 종료 후 다시 시도해 주세요.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        val email = googleUserInfo.email
 | 
				
			||||||
 | 
					        checkEmail(email)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        val nickname = nicknameGenerateService.generateUniqueNickname()
 | 
					        val nickname = nicknameGenerateService.generateUniqueNickname()
 | 
				
			||||||
        val member = Member(
 | 
					        val member = Member(
 | 
				
			||||||
            googleId = googleUserInfo.sub,
 | 
					            googleId = googleUserInfo.sub,
 | 
				
			||||||
            email = googleUserInfo.email,
 | 
					            email = email,
 | 
				
			||||||
            password = "",
 | 
					            password = "",
 | 
				
			||||||
            nickname = nickname,
 | 
					            nickname = nickname,
 | 
				
			||||||
            profileImage = "profile/default-profile.png",
 | 
					            profileImage = "profile/default-profile.png",
 | 
				
			||||||
@@ -774,7 +810,14 @@ class MemberService(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Transactional
 | 
					    @Transactional
 | 
				
			||||||
    fun findOrRegister(kakaoUserInfo: KakaoUserInfo, container: String, marketingPid: String?): Member {
 | 
					    fun findOrRegister(kakaoUserInfo: KakaoUserInfo, container: String, marketingPid: String?): Member {
 | 
				
			||||||
        repository.findByKakaoId(kakaoUserInfo.id)?.let { return it }
 | 
					        val findMember = repository.findByKakaoId(kakaoUserInfo.id)
 | 
				
			||||||
 | 
					        if (findMember != null) {
 | 
				
			||||||
 | 
					            if (findMember.isActive) {
 | 
				
			||||||
 | 
					                return findMember
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                throw SodaException("탈퇴한 계정입니다.\n고객센터로 문의해 주시기 바랍니다.")
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        val stipulationTermsOfService = stipulationRepository.findByIdOrNull(StipulationIds.TERMS_OF_SERVICE_ID)
 | 
					        val stipulationTermsOfService = stipulationRepository.findByIdOrNull(StipulationIds.TERMS_OF_SERVICE_ID)
 | 
				
			||||||
            ?: throw SodaException("잘못된 요청입니다\n앱 종료 후 다시 시도해 주세요.")
 | 
					            ?: throw SodaException("잘못된 요청입니다\n앱 종료 후 다시 시도해 주세요.")
 | 
				
			||||||
@@ -782,10 +825,13 @@ class MemberService(
 | 
				
			|||||||
        val stipulationPrivacyPolicy = stipulationRepository.findByIdOrNull(StipulationIds.PRIVACY_POLICY_ID)
 | 
					        val stipulationPrivacyPolicy = stipulationRepository.findByIdOrNull(StipulationIds.PRIVACY_POLICY_ID)
 | 
				
			||||||
            ?: throw SodaException("잘못된 요청입니다\n앱 종료 후 다시 시도해 주세요.")
 | 
					            ?: throw SodaException("잘못된 요청입니다\n앱 종료 후 다시 시도해 주세요.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        val email = kakaoUserInfo.email
 | 
				
			||||||
 | 
					        checkEmail(email)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        val nickname = nicknameGenerateService.generateUniqueNickname()
 | 
					        val nickname = nicknameGenerateService.generateUniqueNickname()
 | 
				
			||||||
        val member = Member(
 | 
					        val member = Member(
 | 
				
			||||||
            kakaoId = kakaoUserInfo.id,
 | 
					            kakaoId = kakaoUserInfo.id,
 | 
				
			||||||
            email = kakaoUserInfo.email,
 | 
					            email = email,
 | 
				
			||||||
            password = "",
 | 
					            password = "",
 | 
				
			||||||
            nickname = nickname,
 | 
					            nickname = nickname,
 | 
				
			||||||
            profileImage = "profile/default-profile.png",
 | 
					            profileImage = "profile/default-profile.png",
 | 
				
			||||||
@@ -804,4 +850,18 @@ class MemberService(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return member
 | 
					        return member
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private fun checkEmail(email: String) {
 | 
				
			||||||
 | 
					        val member = repository.findByEmail(email)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (member != null) {
 | 
				
			||||||
 | 
					            val provider = when (member.provider) {
 | 
				
			||||||
 | 
					                MemberProvider.APPLE -> "애플"
 | 
				
			||||||
 | 
					                MemberProvider.GOOGLE -> "구글"
 | 
				
			||||||
 | 
					                else -> "카카오"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            throw SodaException("해당 이메일은 $provider 계정으로 가입되어 있습니다. 해당 소셜 로그인을 사용해 주세요.")
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user