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)