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

- 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 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.annotation.Id
import org.springframework.data.redis.core.RedisHash import org.springframework.data.redis.core.RedisHash
@ -20,6 +21,13 @@ data class LiveRoomKickOut(
userList.removeIf { it.userId == userId } userList.removeIf { it.userId == userId }
userList.add(liveRoomKickOutUser) userList.add(liveRoomKickOutUser)
} }
fun convertV2(): LiveRoomKickOutV2 {
return LiveRoomKickOutV2(
roomId = roomId,
userList = userList
)
}
} }
data class LiveRoomKickOutUser( 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.member.MemberRepository
import kr.co.vividnext.sodalive.v2.LiveRoomInfoRedisRepositoryV2 import kr.co.vividnext.sodalive.v2.LiveRoomInfoRedisRepositoryV2
import kr.co.vividnext.sodalive.v2.LiveRoomInfoV2 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.beans.factory.annotation.Value
import org.springframework.data.repository.findByIdOrNull import org.springframework.data.repository.findByIdOrNull
import org.springframework.stereotype.Service import org.springframework.stereotype.Service
@ -17,6 +19,7 @@ class LiveRoomKickOutService(
private val roomInfoRepository: LiveRoomInfoRedisRepository, private val roomInfoRepository: LiveRoomInfoRedisRepository,
private val roomInfoRepositoryV2: LiveRoomInfoRedisRepositoryV2, private val roomInfoRepositoryV2: LiveRoomInfoRedisRepositoryV2,
private val repository: LiveRoomKickOutRedisRepository, private val repository: LiveRoomKickOutRedisRepository,
private val repositoryV2: LiveRoomKickOutRedisRepositoryV2,
private val memberRepository: MemberRepository, private val memberRepository: MemberRepository,
private val roomRepository: LiveRoomRepository, private val roomRepository: LiveRoomRepository,
@ -39,6 +42,22 @@ class LiveRoomKickOutService(
return roomInfoV2 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) { fun kickOut(request: LiveRoomKickOutRequest, member: Member) {
val room = roomRepository.findByIdOrNull(request.roomId) val room = roomRepository.findByIdOrNull(request.roomId)
?: throw SodaException("해당하는 라이브가 없습니다.") ?: throw SodaException("해당하는 라이브가 없습니다.")
@ -54,13 +73,13 @@ class LiveRoomKickOutService(
throw SodaException("권한이 없습니다.") throw SodaException("권한이 없습니다.")
} }
var liveRoomKickOut = repository.findByIdOrNull(request.roomId) var liveRoomKickOut = getLiveRoomKickOut(request.roomId)
if (liveRoomKickOut == null) { if (liveRoomKickOut == null) {
liveRoomKickOut = repository.save(LiveRoomKickOut(roomId = request.roomId)) liveRoomKickOut = repositoryV2.save(LiveRoomKickOutV2(roomId = request.roomId))
} }
liveRoomKickOut.kickOut(request.userId) liveRoomKickOut.kickOut(request.userId)
repository.save(liveRoomKickOut) repositoryV2.save(liveRoomKickOut)
val kickOutUser = memberRepository.findByIdOrNull(request.userId) val kickOutUser = memberRepository.findByIdOrNull(request.userId)
if (kickOutUser != null) { 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)
}
}