From ddfb194716022ce68d4cd4b92438bb5456f28361 Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 17 Mar 2026 15:35:07 +0900 Subject: [PATCH] =?UTF-8?q?fix(live-room):=20=EB=9D=BC=EC=9D=B4=EB=B8=8C?= =?UTF-8?q?=20=EB=B0=A9=20=ED=9B=84=EC=9B=90=20=EB=9E=AD=ED=82=B9=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EC=97=90=20=EA=B8=B0=EA=B0=84=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=EC=9D=84=20=EB=B0=98=EC=98=81=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/20260317_라이브방후원랭킹기간반영.md | 24 +++++++++++++++++++ .../sodalive/live/room/LiveRoomService.kt | 13 ++++++---- 2 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 docs/20260317_라이브방후원랭킹기간반영.md diff --git a/docs/20260317_라이브방후원랭킹기간반영.md b/docs/20260317_라이브방후원랭킹기간반영.md new file mode 100644 index 00000000..959cf82a --- /dev/null +++ b/docs/20260317_라이브방후원랭킹기간반영.md @@ -0,0 +1,24 @@ +# 라이브 방 후원 랭킹 기간 반영 + +- [x] `LiveRoomService.getRoomInfo`의 Top3 후원 랭킹 조회 로직 현황 확인 +- [x] `CreatorDonationRankingService.getMemberDonationRanking`의 기간 처리 패턴 확인 및 적용 방식 결정 +- [x] 크리에이터의 `DonationRankingPeriod` 선택값(`WEEKLY`/`CUMULATIVE`)을 반영해 Top3 `List` 조회 로직 수정 +- [x] 정적 진단 및 테스트/빌드 검증 수행 +- [x] 검증 결과 문서화 + +## 검증 기록 + +### 1차 구현 +- 무엇을: 초기 계획 수립 +- 왜: 작업 전 구현 범위와 검증 기준을 명확히 하기 위해 +- 어떻게: 계획 문서 생성 완료 + +### 2차 구현 +- 무엇을: 후원 랭킹 기간 처리 패턴 전수 탐색 및 `getRoomInfo` 구현 변경 +- 왜: 기존 누적 고정 조회를 크리에이터 선택 기간(`DonationRankingPeriod`) 기준 조회로 변경하기 위해 +- 어떻게: `grep`/`ast-grep`/백그라운드 `explore`/`librarian` 탐색 결과를 근거로 `LiveRoomService`에서 `CreatorDonationRankingService.getMemberDonationRanking(..., period = donationRankingPeriod)` 호출 후 `.map { it.userId }`로 `List` 유지 + +### 3차 검증 +- 무엇을: 코드 스타일/컴파일/테스트/빌드 검증 +- 왜: 변경이 기존 규칙과 빌드 체인에서 안전하게 동작하는지 확인하기 위해 +- 어떻게: `lsp_diagnostics`는 Kotlin LSP 미구성으로 수행 불가 확인, `./gradlew test && ./gradlew build` 1차 실행 시 import 정렬 실패(`ktlintMainSourceSetCheck`), import 순서 수정 후 동일 명령 재실행하여 `BUILD SUCCESSFUL` 확인 diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt index 34e8b621..42ee5092 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt @@ -18,6 +18,7 @@ import kr.co.vividnext.sodalive.can.use.UseCanCalculateRepository import kr.co.vividnext.sodalive.can.use.UseCanCalculateStatus import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.explorer.ExplorerQueryRepository +import kr.co.vividnext.sodalive.explorer.profile.CreatorDonationRankingService import kr.co.vividnext.sodalive.extensions.convertLocalDateTime import kr.co.vividnext.sodalive.fcm.FcmDeepLinkValue import kr.co.vividnext.sodalive.fcm.FcmEvent @@ -54,6 +55,7 @@ import kr.co.vividnext.sodalive.live.room.visit.LiveRoomVisitService import kr.co.vividnext.sodalive.live.roulette.NewRouletteRepository import kr.co.vividnext.sodalive.live.signature.SignatureCanRepository import kr.co.vividnext.sodalive.live.tag.LiveTagRepository +import kr.co.vividnext.sodalive.member.DonationRankingPeriod import kr.co.vividnext.sodalive.member.Gender import kr.co.vividnext.sodalive.member.Member import kr.co.vividnext.sodalive.member.MemberRepository @@ -95,6 +97,7 @@ class LiveRoomService( private val useCanCalculateRepository: UseCanCalculateRepository, private val reservationRepository: LiveReservationRepository, private val explorerQueryRepository: ExplorerQueryRepository, + private val creatorDonationRankingService: CreatorDonationRankingService, private val roomVisitService: LiveRoomVisitService, private val canPaymentService: CanPaymentService, private val chargeRepository: ChargeRepository, @@ -988,11 +991,13 @@ class LiveRoomService( } val donationRankingTop3UserIds = if (room.member!!.isVisibleDonationRank) { - explorerQueryRepository + val donationRankingPeriod = room.member!!.donationRankingPeriod ?: DonationRankingPeriod.CUMULATIVE + creatorDonationRankingService .getMemberDonationRanking( - room.member!!.id!!, - 3, - withDonationCan = false + creatorId = room.member!!.id!!, + limit = 3, + withDonationCan = false, + period = donationRankingPeriod ) .map { it.userId } } else {