From 1ca7e1744dc6d4fdef5b3541021c5618ca3886ed Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 12 Feb 2026 16:15:58 +0900 Subject: [PATCH] =?UTF-8?q?=ED=99=88=20=ED=81=AC=EB=A6=AC=EC=97=90?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EB=9E=AD=ED=82=B9=20=ED=8C=94=EB=A1=9C?= =?UTF-8?q?=EC=9A=B0=20=EC=A1=B0=ED=9A=8C=20=EC=B5=9C=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 홈 API의 크리에이터 랭킹 응답에서 팔로우 여부를 일괄 조회로 계산한다. --- .../sodalive/api/home/HomeService.kt | 24 ++++++++++--------- .../explorer/ExplorerQueryRepository.kt | 17 +++++++++++++ 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/api/home/HomeService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/api/home/HomeService.kt index 76273eb6..7fad82d6 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/api/home/HomeService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/api/home/HomeService.kt @@ -82,18 +82,20 @@ class HomeService( timezone = timezone ) - val creatorRanking = rankingRepository - .getCreatorRankings(memberId = memberId) - .map { - val followerCount = explorerQueryRepository.getNotificationUserIds(it.id!!).size - val follow = if (memberId != null) { - explorerQueryRepository.isFollow(it.id!!, memberId = memberId) - } else { - false - } + val creatorRankingMembers = rankingRepository.getCreatorRankings(memberId = memberId) + val creatorRankingIds = creatorRankingMembers.mapNotNull { it.id } + val followedCreatorIds = if (memberId != null) { + explorerQueryRepository.getFollowedCreatorIds(creatorRankingIds, memberId) + } else { + emptySet() + } - it.toExplorerSectionCreator(imageHost, follow, followerCount = followerCount) - } + val creatorRanking = creatorRankingMembers.map { creator -> + val creatorId = creator.id!! + val follow = memberId != null && followedCreatorIds.contains(creatorId) + + creator.toExplorerSectionCreator(imageHost, follow) + } val latestContentThemeList = contentThemeService.getActiveThemeOfContent( isAdult = isAdult, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerQueryRepository.kt index cce60c55..c0c1fae6 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerQueryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerQueryRepository.kt @@ -637,6 +637,23 @@ class ExplorerQueryRepository( .fetchOne() ?: false } + fun getFollowedCreatorIds(creatorIds: List, memberId: Long): Set { + if (creatorIds.isEmpty()) { + return emptySet() + } + + return queryFactory + .select(creatorFollowing.creator.id) + .from(creatorFollowing) + .where( + creatorFollowing.isActive.isTrue + .and(creatorFollowing.creator.id.`in`(creatorIds)) + .and(creatorFollowing.member.id.eq(memberId)) + ) + .fetch() + .toSet() + } + fun getCreatorCheers(cheersId: Long): CreatorCheers? { return queryFactory .selectFrom(creatorCheers)