From 1ba170b40d4063f74ffad0c7a4526b5f308ed4b2 Mon Sep 17 00:00:00 2001 From: Jongwon Date: Tue, 25 Apr 2023 20:49:32 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=8C=94=EB=A1=9C=EC=9A=B0=ED=95=9C=20?= =?UTF-8?q?=EC=9C=A0=EC=A0=80=EA=B0=80=20=EC=A0=81=EC=9D=80=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20=EC=9D=B8=EA=B8=B0=20=EB=A7=8E=EC=9D=80=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=20=ED=94=BC=EB=93=9C=20=EB=B6=88=EB=9F=AC=EC=98=A4?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zip/cafe/repository/MemberFollowRepository.kt | 3 +++ src/main/kotlin/zip/cafe/service/FeedService.kt | 13 ++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/zip/cafe/repository/MemberFollowRepository.kt b/src/main/kotlin/zip/cafe/repository/MemberFollowRepository.kt index f378557..620f21a 100644 --- a/src/main/kotlin/zip/cafe/repository/MemberFollowRepository.kt +++ b/src/main/kotlin/zip/cafe/repository/MemberFollowRepository.kt @@ -9,6 +9,9 @@ interface MemberFollowRepository : JpaRepository { @Query("select mf.to.id from MemberFollow mf where mf.from.id = :fromMemberId") fun getFolloweeIds(@Param("fromMemberId") fromMemberId: Long): List + @Query("select mf.to.id from MemberFollow mf group by mf.to.id order by count(mf.to.id) desc") + fun getPopularMemberIds(limit: Int): List + @Query("select (count(m) > 0) from MemberFollow m where m.from.id = :fromMemberId and m.to.id = :toMemberId") fun checkForFollowing(fromMemberId: Long, toMemberId: Long): Boolean } diff --git a/src/main/kotlin/zip/cafe/service/FeedService.kt b/src/main/kotlin/zip/cafe/service/FeedService.kt index 270a2a6..2cef122 100644 --- a/src/main/kotlin/zip/cafe/service/FeedService.kt +++ b/src/main/kotlin/zip/cafe/service/FeedService.kt @@ -5,6 +5,9 @@ import org.springframework.transaction.annotation.Transactional import zip.cafe.api.dto.* import zip.cafe.repository.MemberFollowRepository import zip.cafe.repository.ReviewRepository +import kotlin.math.max + +private const val MIN_FOLLOWEE_SIZE = 3 @Transactional(readOnly = true) @Service @@ -14,7 +17,15 @@ class FeedService( ) { fun getReviewFeeds(loginMemberId: Long, minReviewIdInFeed: Long?, limit: Long): FeedWithPagination { - val followeeIds = memberFollowRepository.getFolloweeIds(loginMemberId) + val followeeIds :MutableList = memberFollowRepository.getFolloweeIds(loginMemberId).toMutableList() + if (followeeIds.size < MIN_FOLLOWEE_SIZE) { + val popularMemberIds = memberFollowRepository.getPopularMemberIds(max(MIN_FOLLOWEE_SIZE, followeeIds.size)) + for (popularMemberId in popularMemberIds) { + if (popularMemberId !in followeeIds) { + followeeIds += popularMemberId + } + } + } val footprints = reviewRepository.findByAuthorIdIn(followeeIds + loginMemberId, minReviewIdInFeed, limit) val isLastPage = minReviewIdInFeed?.let { reviewRepository.isLastPageByAuthorIds(followeeIds, minReviewIdInFeed, limit) } ?: false val reviewAndLikes = reviewRepository.findReviewsAndLikesOnThoseReviews(loginMemberId, footprints.mapNotNull { it.review?.id })