Merge pull request 'fix: 소셜로그인시 유저 행동데이터 SIGN_UP 중복 기록 버그' (#315) from test into main

Reviewed-on: #315
This commit is contained in:
klaus 2025-05-12 08:24:53 +00:00
commit 84f33d1bc2
6 changed files with 39 additions and 21 deletions

View File

@ -351,11 +351,13 @@ class MemberController(
) )
} }
if (response.isNew) {
userActionService.recordAction( userActionService.recordAction(
memberId = response.memberId, memberId = response.memberId,
actionType = ActionType.SIGN_UP, actionType = ActionType.SIGN_UP,
pushToken = request.pushToken pushToken = request.pushToken
) )
}
return ApiResponse.ok(message = "회원가입을 축하드립니다.", data = response.loginResponse) return ApiResponse.ok(message = "회원가입을 축하드립니다.", data = response.loginResponse)
} }
@ -380,11 +382,13 @@ class MemberController(
) )
} }
if (response.isNew) {
userActionService.recordAction( userActionService.recordAction(
memberId = response.memberId, memberId = response.memberId,
actionType = ActionType.SIGN_UP, actionType = ActionType.SIGN_UP,
pushToken = request.pushToken pushToken = request.pushToken
) )
}
return ApiResponse.ok(message = "회원가입을 축하드립니다.", data = response.loginResponse) return ApiResponse.ok(message = "회원가입을 축하드립니다.", data = response.loginResponse)
} }

View File

@ -33,6 +33,7 @@ import kr.co.vividnext.sodalive.member.signUp.SignUpRequest
import kr.co.vividnext.sodalive.member.signUp.SignUpRequestV2 import kr.co.vividnext.sodalive.member.signUp.SignUpRequestV2
import kr.co.vividnext.sodalive.member.signUp.SignUpResponse import kr.co.vividnext.sodalive.member.signUp.SignUpResponse
import kr.co.vividnext.sodalive.member.signUp.SignUpValidator import kr.co.vividnext.sodalive.member.signUp.SignUpValidator
import kr.co.vividnext.sodalive.member.social.MemberResolveResult
import kr.co.vividnext.sodalive.member.social.google.GoogleUserInfo import kr.co.vividnext.sodalive.member.social.google.GoogleUserInfo
import kr.co.vividnext.sodalive.member.social.kakao.KakaoUserInfo import kr.co.vividnext.sodalive.member.social.kakao.KakaoUserInfo
import kr.co.vividnext.sodalive.member.stipulation.Stipulation import kr.co.vividnext.sodalive.member.stipulation.Stipulation
@ -800,11 +801,11 @@ class MemberService(
container: String, container: String,
marketingPid: String?, marketingPid: String?,
pushToken: String? pushToken: String?
): Member { ): MemberResolveResult {
val findMember = repository.findByGoogleId(googleUserInfo.sub) val findMember = repository.findByGoogleId(googleUserInfo.sub)
if (findMember != null) { if (findMember != null) {
if (findMember.isActive) { if (findMember.isActive) {
return findMember return MemberResolveResult(member = findMember, isNew = false)
} else { } else {
throw SodaException("탈퇴한 계정입니다.\n고객센터로 문의해 주시기 바랍니다.") throw SodaException("탈퇴한 계정입니다.\n고객센터로 문의해 주시기 바랍니다.")
} }
@ -847,7 +848,7 @@ class MemberService(
) )
} }
return member return MemberResolveResult(member = member, isNew = true)
} }
@Transactional @Transactional
@ -856,11 +857,11 @@ class MemberService(
container: String, container: String,
marketingPid: String?, marketingPid: String?,
pushToken: String? pushToken: String?
): Member { ): MemberResolveResult {
val findMember = repository.findByKakaoId(kakaoUserInfo.id) val findMember = repository.findByKakaoId(kakaoUserInfo.id)
if (findMember != null) { if (findMember != null) {
if (findMember.isActive) { if (findMember.isActive) {
return findMember return MemberResolveResult(member = findMember, isNew = false)
} else { } else {
throw SodaException("탈퇴한 계정입니다.\n고객센터로 문의해 주시기 바랍니다.") throw SodaException("탈퇴한 계정입니다.\n고객센터로 문의해 주시기 바랍니다.")
} }
@ -903,7 +904,7 @@ class MemberService(
) )
} }
return member return MemberResolveResult(member = member, isNew = true)
} }
private fun checkEmail(email: String) { private fun checkEmail(email: String) {

View File

@ -0,0 +1,8 @@
package kr.co.vividnext.sodalive.member.social
import kr.co.vividnext.sodalive.member.Member
data class MemberResolveResult(
val member: Member,
val isNew: Boolean
)

View File

@ -5,5 +5,6 @@ import kr.co.vividnext.sodalive.member.login.LoginResponse
data class SocialLoginResponse( data class SocialLoginResponse(
val memberId: Long, val memberId: Long,
val marketingPid: String?, val marketingPid: String?,
val loginResponse: LoginResponse val loginResponse: LoginResponse,
val isNew: Boolean
) )

View File

@ -27,7 +27,8 @@ class GoogleAuthService(
): SocialLoginResponse { ): SocialLoginResponse {
val googleUserInfo = googleService.getUserInfo(idToken) val googleUserInfo = googleService.getUserInfo(idToken)
?: throw SodaException("구글 로그인을 하지 못했습니다. 다시 시도해 주세요") ?: throw SodaException("구글 로그인을 하지 못했습니다. 다시 시도해 주세요")
val member = memberService.findOrRegister(googleUserInfo, container, marketingPid, pushToken) val memberResolveResult = memberService.findOrRegister(googleUserInfo, container, marketingPid, pushToken)
val member = memberResolveResult.member
val principal = MemberAdapter(member) val principal = MemberAdapter(member)
val authToken = GoogleAuthenticationToken(idToken, principal.authorities) val authToken = GoogleAuthenticationToken(idToken, principal.authorities)
authToken.setPrincipal(principal) authToken.setPrincipal(principal)
@ -53,7 +54,8 @@ class GoogleAuthService(
return SocialLoginResponse( return SocialLoginResponse(
memberId = member.id!!, memberId = member.id!!,
marketingPid = marketingPid, marketingPid = marketingPid,
loginResponse = loginResponse loginResponse = loginResponse,
isNew = memberResolveResult.isNew
) )
} }
} }

View File

@ -27,7 +27,8 @@ class KakaoAuthService(
): SocialLoginResponse { ): SocialLoginResponse {
val kakaoUserInfo = kakaoService.getUserInfo(accessToken) val kakaoUserInfo = kakaoService.getUserInfo(accessToken)
?: throw SodaException("카카오 로그인을 하지 못했습니다. 다시 시도해 주세요") ?: throw SodaException("카카오 로그인을 하지 못했습니다. 다시 시도해 주세요")
val member = memberService.findOrRegister(kakaoUserInfo, container, marketingPid, pushToken) val memberResolveResult = memberService.findOrRegister(kakaoUserInfo, container, marketingPid, pushToken)
val member = memberResolveResult.member
val principal = MemberAdapter(member) val principal = MemberAdapter(member)
val authToken = KakaoAuthenticationToken(accessToken, principal.authorities) val authToken = KakaoAuthenticationToken(accessToken, principal.authorities)
authToken.setPrincipal(principal) authToken.setPrincipal(principal)
@ -53,7 +54,8 @@ class KakaoAuthService(
return SocialLoginResponse( return SocialLoginResponse(
memberId = member.id!!, memberId = member.id!!,
marketingPid = marketingPid, marketingPid = marketingPid,
loginResponse = loginResponse loginResponse = loginResponse,
isNew = memberResolveResult.isNew
) )
} }
} }