feat: 푸시 토큰 - 한 사람이 여러개의 디바이스로 로그인 해도 모든 푸시 토큰이 기록되어 있어서 모든 디바이스에 푸시가 가도록 수정

This commit is contained in:
2025-04-28 21:40:20 +09:00
parent 73edc0515f
commit 8a924bd5be
7 changed files with 172 additions and 65 deletions

View File

@@ -10,6 +10,7 @@ import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.common.SodaException
import kr.co.vividnext.sodalive.content.order.OrderService
import kr.co.vividnext.sodalive.email.SendEmailService
import kr.co.vividnext.sodalive.fcm.PushTokenService
import kr.co.vividnext.sodalive.jwt.TokenProvider
import kr.co.vividnext.sodalive.live.reservation.LiveReservationRepository
import kr.co.vividnext.sodalive.live.room.detail.GetRoomDetailUser
@@ -82,6 +83,7 @@ class MemberService(
private val orderService: OrderService,
private val emailService: SendEmailService,
private val pushTokenService: PushTokenService,
private val canPaymentService: CanPaymentService,
private val nicknameGenerateService: NicknameGenerateService,
private val memberNotificationService: MemberNotificationService,
@@ -127,7 +129,6 @@ class MemberService(
gender = Gender.NONE,
container = request.container
)
member.pushToken = request.pushToken
if (!request.marketingPid.isNullOrBlank()) {
member.activePid = request.marketingPid
@@ -137,6 +138,14 @@ class MemberService(
repository.save(member)
agreeTermsOfServiceAndPrivacyPolicy(member, stipulationTermsOfService, stipulationPrivacyPolicy)
if (request.pushToken != null) {
pushTokenService.registerToken(
memberId = member.id!!,
token = request.pushToken,
deviceType = request.container
)
}
return SignUpResponse(
memberId = member.id!!,
marketingPid = request.marketingPid,
@@ -235,16 +244,11 @@ class MemberService(
@Transactional
fun updatePushToken(memberId: Long, pushToken: String, container: String) {
val existsHavePushTokenMemberList = repository.findByPushToken(pushToken = pushToken)
for (existsHavePushTokenMember in existsHavePushTokenMemberList) {
existsHavePushTokenMember.pushToken = null
}
val member = repository.findByIdOrNull(id = memberId)
?: throw SodaException("로그인 정보를 확인해주세요.")
member.pushToken = pushToken
member.container = container
pushTokenService.registerToken(
memberId = memberId,
token = pushToken,
deviceType = container
)
}
@Transactional
@@ -551,6 +555,7 @@ class MemberService(
?: throw SodaException("로그인 정보를 확인해주세요.")
member.pushToken = null
pushTokenService.logout(memberId = memberId)
val lock = getOrCreateLock(memberId = memberId)
lock.write {
@@ -568,6 +573,7 @@ class MemberService(
?: throw SodaException("로그인 정보를 확인해주세요.")
member.pushToken = null
pushTokenService.logout(memberId = memberId)
val lock = getOrCreateLock(memberId = memberId)
lock.write { tokenRepository.deleteById(memberId) }