라이브 방 강퇴 정보 처리 및 저장

- Redis -> Valkey로 이전되도록 수정
This commit is contained in:
Klaus 2024-11-23 00:25:45 +09:00
parent 2d0492cafa
commit 695ccf975b
4 changed files with 59 additions and 3 deletions

View File

@ -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(

View File

@ -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) {

View File

@ -0,0 +1,5 @@
package kr.co.vividnext.sodalive.v2
import org.springframework.data.repository.CrudRepository
interface LiveRoomKickOutRedisRepositoryV2 : CrudRepository<LiveRoomKickOutV2, Long>

View File

@ -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<LiveRoomKickOutUser> = 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)
}
}