From 2f2437e14dfae997098801428038e1900263892d Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 23 Nov 2024 01:29:34 +0900 Subject: [PATCH] =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=20=EB=B0=A9=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EC=B2=98=EB=A6=AC=20=EB=B0=8F=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=20-=20Redis=20->=20Valkey=EB=A1=9C=20=EC=9D=B4?= =?UTF-8?q?=EC=A0=84=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../live/room/menu/LiveRoomMenuService.kt | 53 +++++++++++++++---- .../live/roulette/RedisIdGenerator.kt | 2 +- .../sodalive/v2/LiveRoomMenuRepositoryV2.kt | 8 +++ 3 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/v2/LiveRoomMenuRepositoryV2.kt 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 +}