From d04b44c93126dcfb261da16ea6fa8dc0d3762e20 Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 18 Jul 2025 14:40:16 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=B5=9C=EA=B7=BC=20=EC=A2=85=EB=A3=8C?= =?UTF-8?q?=ED=95=9C=20=EB=9D=BC=EC=9D=B4=EB=B8=8C=20API=20-=20=EC=B0=A8?= =?UTF-8?q?=EB=8B=A8=20=EB=8B=B9=ED=95=9C=20=ED=81=AC=EB=A6=AC=EC=97=90?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=EB=8A=94=20=EC=95=88=EB=B3=B4=EC=9D=B4?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95=20-=2020=EA=B0=9C=20?= =?UTF-8?q?=EB=AF=B8=EB=A7=8C=EC=9D=B4=EB=A9=B4=20=EC=9E=AC=EC=8B=9C?= =?UTF-8?q?=EB=8F=84=20=EC=B2=98=EB=A6=AC=20-=20=EC=9E=AC=EC=8B=9C?= =?UTF-8?q?=EB=8F=84=20=EC=B5=9C=EB=8C=80=20=ED=9A=9F=EC=88=98=203?= =?UTF-8?q?=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/live/room/LiveRoomController.kt | 6 ++- .../sodalive/live/room/LiveRoomRepository.kt | 5 ++- .../sodalive/live/room/LiveRoomService.kt | 38 +++++++++++++------ 3 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomController.kt index c39ed1a..c33c5be 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomController.kt @@ -293,5 +293,9 @@ class LiveRoomController( } @GetMapping("/latest-finished-live") - fun getLatestFinishedLive() = run { ApiResponse.ok(service.getLatestFinishedLive()) } + fun getLatestFinishedLive( + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? + ) = run { + ApiResponse.ok(service.getLatestFinishedLive(member)) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomRepository.kt index d92f181..905fd26 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomRepository.kt @@ -60,7 +60,7 @@ interface LiveRoomQueryRepository { fun getTotalHeartCount(roomId: Long): Int? fun getLiveRoomCreatorId(roomId: Long): Long? fun getHeartList(roomId: Long): List - fun getLatestFinishedLive(): List + fun getLatestFinishedLive(offset: Long): List } class LiveRoomQueryRepositoryImpl( @@ -382,7 +382,7 @@ class LiveRoomQueryRepositoryImpl( .fetch() } - override fun getLatestFinishedLive(): List { + override fun getLatestFinishedLive(offset: Long): List { return queryFactory .selectFrom(liveRoom) .innerJoin(liveRoom.member, member) @@ -392,6 +392,7 @@ class LiveRoomQueryRepositoryImpl( ) .groupBy(liveRoom.member.id) .orderBy(liveRoom.updatedAt.max().desc()) + .offset(offset) .limit(20) .fetch() } 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 e5a88cc..bae8f86 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 @@ -1298,16 +1298,32 @@ class LiveRoomService( ) } - fun getLatestFinishedLive(): List { - return repository.getLatestFinishedLive() - .map { - GetLatestFinishedLiveResponse( - memberId = it.member!!.id!!, - nickname = it.member!!.nickname, - profileImageUrl = "$cloudFrontHost/${it.member!!.profileImage}", - title = it.title, - timeAgo = it.updatedAt!!.getTimeAgoString() - ) - } + fun getLatestFinishedLive(member: Member?): List { + val result = mutableListOf() + var retry = 0L + + do { + result.addAll( + repository.getLatestFinishedLive(offset = retry) + .filter { + if (member?.id != null) { + !blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it.member!!.id!!) + } else { + true + } + } + .map { + GetLatestFinishedLiveResponse( + memberId = it.member!!.id!!, + nickname = it.member!!.nickname, + profileImageUrl = "$cloudFrontHost/${it.member!!.profileImage}", + title = it.title, + timeAgo = it.updatedAt!!.getTimeAgoString() + ) + } + ) + } while (result.size < 20 && retry++ < 3) + + return result.take(20) } }