From 695ccf975bdc808f9fe47a292a5d390828543943 Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 23 Nov 2024 00:25:45 +0900 Subject: [PATCH] =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=20=EB=B0=A9=20?= =?UTF-8?q?=EA=B0=95=ED=87=B4=20=EC=A0=95=EB=B3=B4=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=8F=20=EC=A0=80=EC=9E=A5=20-=20Redis=20->=20Valkey?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B4=EC=A0=84=EB=90=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../live/room/kickout/LiveRoomKickOut.kt | 8 ++++++ .../room/kickout/LiveRoomKickOutService.kt | 25 ++++++++++++++++--- .../v2/LiveRoomKickOutRedisRepositoryV2.kt | 5 ++++ .../sodalive/v2/LiveRoomKickOutV2.kt | 24 ++++++++++++++++++ 4 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/v2/LiveRoomKickOutRedisRepositoryV2.kt create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/v2/LiveRoomKickOutV2.kt diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/kickout/LiveRoomKickOut.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/kickout/LiveRoomKickOut.kt index aa4bc54..0c2b82e 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/kickout/LiveRoomKickOut.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/kickout/LiveRoomKickOut.kt @@ -1,5 +1,6 @@ package kr.co.vividnext.sodalive.live.room.kickout +import kr.co.vividnext.sodalive.v2.LiveRoomKickOutV2 import org.springframework.data.annotation.Id import org.springframework.data.redis.core.RedisHash @@ -20,6 +21,13 @@ data class LiveRoomKickOut( userList.removeIf { it.userId == userId } userList.add(liveRoomKickOutUser) } + + fun convertV2(): LiveRoomKickOutV2 { + return LiveRoomKickOutV2( + roomId = roomId, + userList = userList + ) + } } data class LiveRoomKickOutUser( diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/kickout/LiveRoomKickOutService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/kickout/LiveRoomKickOutService.kt index a702818..2a656b3 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/kickout/LiveRoomKickOutService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/kickout/LiveRoomKickOutService.kt @@ -8,6 +8,8 @@ import kr.co.vividnext.sodalive.member.Member import kr.co.vividnext.sodalive.member.MemberRepository import kr.co.vividnext.sodalive.v2.LiveRoomInfoRedisRepositoryV2 import kr.co.vividnext.sodalive.v2.LiveRoomInfoV2 +import kr.co.vividnext.sodalive.v2.LiveRoomKickOutRedisRepositoryV2 +import kr.co.vividnext.sodalive.v2.LiveRoomKickOutV2 import org.springframework.beans.factory.annotation.Value import org.springframework.data.repository.findByIdOrNull import org.springframework.stereotype.Service @@ -17,6 +19,7 @@ class LiveRoomKickOutService( private val roomInfoRepository: LiveRoomInfoRedisRepository, private val roomInfoRepositoryV2: LiveRoomInfoRedisRepositoryV2, private val repository: LiveRoomKickOutRedisRepository, + private val repositoryV2: LiveRoomKickOutRedisRepositoryV2, private val memberRepository: MemberRepository, private val roomRepository: LiveRoomRepository, @@ -39,6 +42,22 @@ class LiveRoomKickOutService( return roomInfoV2 } + private fun getLiveRoomKickOut(roomId: Long): LiveRoomKickOutV2? { + var liveRoomKickOutV2 = repositoryV2.findByIdOrNull(roomId) + + if (liveRoomKickOutV2 == null) { + val liveRoomKickOutV1 = repository.findByIdOrNull(roomId) + + if (liveRoomKickOutV1 != null) { + liveRoomKickOutV2 = liveRoomKickOutV1.convertV2() + repositoryV2.save(liveRoomKickOutV2) + repository.delete(liveRoomKickOutV1) + } + } + + return liveRoomKickOutV2 + } + fun kickOut(request: LiveRoomKickOutRequest, member: Member) { val room = roomRepository.findByIdOrNull(request.roomId) ?: throw SodaException("해당하는 라이브가 없습니다.") @@ -54,13 +73,13 @@ class LiveRoomKickOutService( throw SodaException("권한이 없습니다.") } - var liveRoomKickOut = repository.findByIdOrNull(request.roomId) + var liveRoomKickOut = getLiveRoomKickOut(request.roomId) if (liveRoomKickOut == null) { - liveRoomKickOut = repository.save(LiveRoomKickOut(roomId = request.roomId)) + liveRoomKickOut = repositoryV2.save(LiveRoomKickOutV2(roomId = request.roomId)) } liveRoomKickOut.kickOut(request.userId) - repository.save(liveRoomKickOut) + repositoryV2.save(liveRoomKickOut) val kickOutUser = memberRepository.findByIdOrNull(request.userId) if (kickOutUser != null) { diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/v2/LiveRoomKickOutRedisRepositoryV2.kt b/src/main/kotlin/kr/co/vividnext/sodalive/v2/LiveRoomKickOutRedisRepositoryV2.kt new file mode 100644 index 0000000..2ace0ad --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/v2/LiveRoomKickOutRedisRepositoryV2.kt @@ -0,0 +1,5 @@ +package kr.co.vividnext.sodalive.v2 + +import org.springframework.data.repository.CrudRepository + +interface LiveRoomKickOutRedisRepositoryV2 : CrudRepository diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/v2/LiveRoomKickOutV2.kt b/src/main/kotlin/kr/co/vividnext/sodalive/v2/LiveRoomKickOutV2.kt new file mode 100644 index 0000000..fb48c29 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/v2/LiveRoomKickOutV2.kt @@ -0,0 +1,24 @@ +package kr.co.vividnext.sodalive.v2 + +import kr.co.vividnext.sodalive.live.room.kickout.LiveRoomKickOutUser +import org.springframework.data.annotation.Id +import org.springframework.data.redis.core.RedisHash + +@RedisHash("LiveRoomKickOut") +data class LiveRoomKickOutV2( + @Id + val roomId: Long, + var userList: MutableList = mutableListOf() +) { + fun kickOut(userId: Long) { + var liveRoomKickOutUser = userList.find { it.userId == userId } + if (liveRoomKickOutUser == null) { + liveRoomKickOutUser = LiveRoomKickOutUser(userId) + } else { + liveRoomKickOutUser.plusCount() + } + + userList.removeIf { it.userId == userId } + userList.add(liveRoomKickOutUser) + } +}