diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/menu/LiveRoomMenuService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/menu/LiveRoomMenuService.kt index e9fc6ab..9b5d835 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/menu/LiveRoomMenuService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/menu/LiveRoomMenuService.kt @@ -2,17 +2,48 @@ package kr.co.vividnext.sodalive.live.room.menu import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.live.roulette.RedisIdGenerator +import kr.co.vividnext.sodalive.v2.LiveRoomMenuRepositoryV2 import org.springframework.stereotype.Service @Service class LiveRoomMenuService( private val idGenerator: RedisIdGenerator, - private val repository: LiveRoomMenuRepository + private val repository: LiveRoomMenuRepository, + private val repositoryV2: LiveRoomMenuRepositoryV2 ) { + private fun findByCreatorId(creatorId: Long): List { + var liveRoomMenuList = repositoryV2.findByCreatorId(creatorId) + + if (liveRoomMenuList.isEmpty()) { + liveRoomMenuList = repository.findByCreatorId(creatorId) + + if (liveRoomMenuList.isNotEmpty()) { + val newLiveRoomMenuList = liveRoomMenuList.map { liveRoomMenu -> + val newLiveRoomMenu = LiveRoomMenu( + id = idGenerator.generateId(SEQUENCE_NAME), + creatorId = liveRoomMenu.creatorId, + isActive = liveRoomMenu.isActive, + menu = liveRoomMenu.menu + ) + repositoryV2.save(newLiveRoomMenu) + repository.delete(liveRoomMenu) + + newLiveRoomMenu + } + + return newLiveRoomMenuList + } else { + return emptyList() + } + } else { + return liveRoomMenuList + } + } + fun getAllLiveMenu(creatorId: Long, memberId: Long): List { if (creatorId != memberId) throw SodaException("잘못된 요청입니다.") - return repository.findByCreatorId(creatorId) + return findByCreatorId(creatorId) .sortedBy { it.id } .asSequence() .map { GetMenuPresetResponse(id = it.id, menu = it.menu, isActive = it.isActive) } @@ -22,7 +53,7 @@ class LiveRoomMenuService( fun createLiveMenu(memberId: Long, request: CreateLiveMenuRequest): Boolean { liveMenuValidate(menu = request.menu) - val menuList = repository.findByCreatorId(creatorId = memberId) + val menuList = findByCreatorId(creatorId = memberId) if (menuList.size >= 3) { throw SodaException("메뉴판의 최대개수는 3개입니다.") @@ -31,7 +62,7 @@ class LiveRoomMenuService( if (request.isActive) { menuList.forEach { it.isActive = false - repository.save(it) + repositoryV2.save(it) } } @@ -42,14 +73,14 @@ class LiveRoomMenuService( menu = request.menu ) - repository.save(menu) + repositoryV2.save(menu) return request.isActive } fun updateLiveMenu(memberId: Long, request: UpdateLiveMenuRequest) { liveMenuValidate(menu = request.menu) - val menuList = repository.findByCreatorId(creatorId = memberId) + val menuList = findByCreatorId(creatorId = memberId) if (menuList.isEmpty()) { throw SodaException("잘못된 요청입니다.") } @@ -58,16 +89,16 @@ class LiveRoomMenuService( if (it.id == request.id) { it.menu = request.menu it.isActive = request.isActive - repository.save(it) + repositoryV2.save(it) } else if (request.isActive) { it.isActive = false - repository.save(it) + repositoryV2.save(it) } } } fun getLiveMenu(creatorId: Long): GetMenuPresetResponse? { - val menuList = repository.findByCreatorId(creatorId = creatorId) + val menuList = findByCreatorId(creatorId = creatorId) var activeMenu: LiveRoomMenu? = null for (menu in menuList) { @@ -85,11 +116,11 @@ class LiveRoomMenuService( } fun deactivateAll(memberId: Long) { - val menuList = repository.findByCreatorId(creatorId = memberId) + val menuList = findByCreatorId(creatorId = memberId) menuList.forEach { it.isActive = false - repository.save(it) + repositoryV2.save(it) } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/roulette/RedisIdGenerator.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/roulette/RedisIdGenerator.kt index 12a7870..a8504da 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/roulette/RedisIdGenerator.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/roulette/RedisIdGenerator.kt @@ -6,7 +6,7 @@ import org.springframework.stereotype.Service @Service class RedisIdGenerator( - @Qualifier("redisStringRedisTemplate") private val stringRedisTemplate: StringRedisTemplate + @Qualifier("valkeyStringRedisTemplate") private val stringRedisTemplate: StringRedisTemplate ) { fun generateId(key: String): Long { return stringRedisTemplate.opsForValue().increment(key, 1) ?: 1L diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/v2/LiveRoomMenuRepositoryV2.kt b/src/main/kotlin/kr/co/vividnext/sodalive/v2/LiveRoomMenuRepositoryV2.kt new file mode 100644 index 0000000..5d48f0d --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/v2/LiveRoomMenuRepositoryV2.kt @@ -0,0 +1,8 @@ +package kr.co.vividnext.sodalive.v2 + +import kr.co.vividnext.sodalive.live.room.menu.LiveRoomMenu +import org.springframework.data.repository.CrudRepository + +interface LiveRoomMenuRepositoryV2 : CrudRepository { + fun findByCreatorId(creatorId: Long): List +}