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) } }