diff --git a/src/main/kotlin/com/poseplz/server/application/auth/LoginApplicationService.kt b/src/main/kotlin/com/poseplz/server/application/auth/LoginApplicationService.kt index f5d4605..a87b0d4 100644 --- a/src/main/kotlin/com/poseplz/server/application/auth/LoginApplicationService.kt +++ b/src/main/kotlin/com/poseplz/server/application/auth/LoginApplicationService.kt @@ -18,14 +18,12 @@ class LoginApplicationService( val authenticatedProviderIdentifier = resolveLoginService(loginRequestVo).getProviderUserId(loginRequestVo) val member = (memberService.findByProviderIdentifier(authenticatedProviderIdentifier) ?: memberService.create(authenticatedProviderIdentifier)) - if (member.name == null) { - member.name = providerUserNameService.getProviderUserName(loginRequestVo) - } - if (member.profileImageUrl == null) { - member.profileImageUrl = providerUserProfileImageService.getProviderUserProfileImage(loginRequestVo) - } - member.profileImageUrl?.run { - member.profileImageUrl = providerUserProfileImageService.getProviderUserProfileImage(loginRequestVo) + if (member.name == null || member.profileImageUrl == null) { + memberService.update( + memberId = member.memberId, + name = providerUserNameService.getProviderUserName(member.providerIdentifier), + profileImageUrl = providerUserProfileImageService.getProviderUserProfileImage(member.providerIdentifier) + ) } return LoginResponseVo( memberVo = MemberVo.from(member), diff --git a/src/main/kotlin/com/poseplz/server/application/auth/ProviderUserNameService.kt b/src/main/kotlin/com/poseplz/server/application/auth/ProviderUserNameService.kt index 69feb92..ffc7387 100644 --- a/src/main/kotlin/com/poseplz/server/application/auth/ProviderUserNameService.kt +++ b/src/main/kotlin/com/poseplz/server/application/auth/ProviderUserNameService.kt @@ -1,6 +1,8 @@ package com.poseplz.server.application.auth +import com.poseplz.server.domain.member.ProviderIdentifier + interface ProviderUserNameService { - fun getProviderUserName(loginRequestVo: LoginRequestVo): String? - fun supports(loginRequestVo: LoginRequestVo): Boolean + fun getProviderUserName(providerIdentifier: ProviderIdentifier): String? + fun supports(providerIdentifier: ProviderIdentifier): Boolean } diff --git a/src/main/kotlin/com/poseplz/server/application/auth/ProviderUserProfileImageService.kt b/src/main/kotlin/com/poseplz/server/application/auth/ProviderUserProfileImageService.kt index 03eb034..cf44e0c 100644 --- a/src/main/kotlin/com/poseplz/server/application/auth/ProviderUserProfileImageService.kt +++ b/src/main/kotlin/com/poseplz/server/application/auth/ProviderUserProfileImageService.kt @@ -1,6 +1,8 @@ package com.poseplz.server.application.auth +import com.poseplz.server.domain.member.ProviderIdentifier + interface ProviderUserProfileImageService { - fun getProviderUserProfileImage(loginRequestVo: LoginRequestVo): String? - fun supports(loginRequestVo: LoginRequestVo): Boolean + fun getProviderUserProfileImage(providerIdentifier: ProviderIdentifier): String? + fun supports(providerIdentifier: ProviderIdentifier): Boolean } diff --git a/src/main/kotlin/com/poseplz/server/domain/member/MemberService.kt b/src/main/kotlin/com/poseplz/server/domain/member/MemberService.kt index c5062d8..6ff3bd7 100644 --- a/src/main/kotlin/com/poseplz/server/domain/member/MemberService.kt +++ b/src/main/kotlin/com/poseplz/server/domain/member/MemberService.kt @@ -7,6 +7,12 @@ import org.springframework.transaction.annotation.Transactional interface MemberService { fun create(providerIdentifier: ProviderIdentifier): Member + fun update( + memberId: Long, + name: String?, + profileImageUrl: String?, + ): Member + fun findById(memberId: Long): Member? fun findByProviderIdentifier(providerIdentifier: ProviderIdentifier): Member? @@ -26,6 +32,20 @@ class MemberServiceImpl( return memberRepository.save(member) } + @Transactional + override fun update( + memberId: Long, + name: String?, + profileImageUrl: String? + ): Member { + return memberRepository.findByIdOrNull(memberId) + ?.apply { + this.name = name + this.profileImageUrl = profileImageUrl + } + ?: throw MemberNotFoundException("존재하지 않는 회원입니다. memberId: $memberId") + } + override fun findById(memberId: Long): Member? { return memberRepository.findByIdOrNull(memberId) } diff --git a/src/main/kotlin/com/poseplz/server/infrastructure/kakao/KakaoAdminSdkClient.kt b/src/main/kotlin/com/poseplz/server/infrastructure/kakao/KakaoAdminSdkClient.kt index f240356..fb3cd14 100644 --- a/src/main/kotlin/com/poseplz/server/infrastructure/kakao/KakaoAdminSdkClient.kt +++ b/src/main/kotlin/com/poseplz/server/infrastructure/kakao/KakaoAdminSdkClient.kt @@ -17,7 +17,7 @@ class KakaoAdminApiClient( return try { val responseEntity = kakaoAdminRestTemplate.getForEntity( - UriComponentsBuilder.fromHttpUrl("https://kapi.kakao.com/v1/user/me") + UriComponentsBuilder.fromHttpUrl("https://kapi.kakao.com/v2/user/me") .queryParam("target_id_type", "user_id") .queryParam("target_id", kakaoUserId) .build() diff --git a/src/main/kotlin/com/poseplz/server/infrastructure/kakao/KakaoUserMeResponse.kt b/src/main/kotlin/com/poseplz/server/infrastructure/kakao/KakaoUserMeResponse.kt index e116d2d..d3a120c 100644 --- a/src/main/kotlin/com/poseplz/server/infrastructure/kakao/KakaoUserMeResponse.kt +++ b/src/main/kotlin/com/poseplz/server/infrastructure/kakao/KakaoUserMeResponse.kt @@ -17,7 +17,7 @@ data class KakaoAccount ( data class KakaoProfile ( @JsonProperty("nickname") - val nickName: String?, + val nickname: String?, @JsonProperty("thumbnail_image_url") val thumbnailImageUrl: String?, @JsonProperty("profile_image_url") diff --git a/src/main/kotlin/com/poseplz/server/infrastructure/kakao/KakaoUserNameService.kt b/src/main/kotlin/com/poseplz/server/infrastructure/kakao/KakaoUserNameService.kt index 6670d6e..3eeb393 100644 --- a/src/main/kotlin/com/poseplz/server/infrastructure/kakao/KakaoUserNameService.kt +++ b/src/main/kotlin/com/poseplz/server/infrastructure/kakao/KakaoUserNameService.kt @@ -1,21 +1,21 @@ package com.poseplz.server.infrastructure.kakao -import com.poseplz.server.application.auth.LoginRequestVo import com.poseplz.server.application.auth.ProviderUserNameService +import com.poseplz.server.domain.member.ProviderIdentifier import com.poseplz.server.domain.member.ProviderType import org.springframework.stereotype.Service @Service class KakaoUserNameService( - private val kakaoApiClient: KakaoApiClient, + private val kakaoAdminApiClient: KakaoAdminApiClient, ) : ProviderUserNameService { - override fun getProviderUserName(loginRequestVo: LoginRequestVo): String? { - return kakaoApiClient.getKakaoUserInfo(loginRequestVo.providerUserCredential!!) + override fun getProviderUserName(providerIdentifier: ProviderIdentifier): String? { + return kakaoAdminApiClient.getUserInfo(providerIdentifier.providerUserId) .kakaoAccount ?.profile - ?.nickName + ?.nickname } - override fun supports(loginRequestVo: LoginRequestVo) = - loginRequestVo.providerType == ProviderType.KAKAO + override fun supports(providerIdentifier: ProviderIdentifier) = + providerIdentifier.providerType == ProviderType.KAKAO } diff --git a/src/main/kotlin/com/poseplz/server/infrastructure/kakao/KakaoUserProfileImageService.kt b/src/main/kotlin/com/poseplz/server/infrastructure/kakao/KakaoUserProfileImageService.kt index ba6e88a..86f1d45 100644 --- a/src/main/kotlin/com/poseplz/server/infrastructure/kakao/KakaoUserProfileImageService.kt +++ b/src/main/kotlin/com/poseplz/server/infrastructure/kakao/KakaoUserProfileImageService.kt @@ -1,21 +1,21 @@ package com.poseplz.server.infrastructure.kakao -import com.poseplz.server.application.auth.LoginRequestVo import com.poseplz.server.application.auth.ProviderUserProfileImageService +import com.poseplz.server.domain.member.ProviderIdentifier import com.poseplz.server.domain.member.ProviderType import org.springframework.stereotype.Service @Service class KakaoUserProfileImageService( - private val kakaoApiClient: KakaoApiClient, + private val kakaoAdminApiClient: KakaoAdminApiClient, ) : ProviderUserProfileImageService { - override fun getProviderUserProfileImage(loginRequestVo: LoginRequestVo): String? { - return kakaoApiClient.getKakaoUserInfo(loginRequestVo.providerUserCredential!!) + override fun getProviderUserProfileImage(providerIdentifier: ProviderIdentifier): String? { + return kakaoAdminApiClient.getUserInfo(providerIdentifier.providerUserId) .kakaoAccount ?.profile ?.profileImageUrl } - override fun supports(loginRequestVo: LoginRequestVo) = - loginRequestVo.providerType == ProviderType.KAKAO + override fun supports(providerIdentifier: ProviderIdentifier) = + providerIdentifier.providerType == ProviderType.KAKAO }