Skip to content

Commit

Permalink
fix: name, profileImageUrl 갱신 안되는 현상 해결 (#27)
Browse files Browse the repository at this point in the history
* fix: profile 조회 로직 오류 수정

* refactor

* fix: name, profileImageUrl 업데이트 안되는 현상 해결
  • Loading branch information
junhaesung authored Dec 26, 2023
1 parent d16f1b0 commit 7dba582
Show file tree
Hide file tree
Showing 8 changed files with 49 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
Original file line number Diff line number Diff line change
@@ -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
}
Original file line number Diff line number Diff line change
@@ -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
}
20 changes: 20 additions & 0 deletions src/main/kotlin/com/poseplz/server/domain/member/MemberService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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?
Expand All @@ -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)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
Original file line number Diff line number Diff line change
@@ -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
}
Original file line number Diff line number Diff line change
@@ -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
}

0 comments on commit 7dba582

Please sign in to comment.