Skip to content

Commit

Permalink
feat: 팔로우한 유저가 적은 경우 인기 많은 유저 피드 불러오도록 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
korECM committed Apr 25, 2023
1 parent 568a18a commit 1ba170b
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
3 changes: 3 additions & 0 deletions src/main/kotlin/zip/cafe/repository/MemberFollowRepository.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ interface MemberFollowRepository : JpaRepository<MemberFollow, Long> {
@Query("select mf.to.id from MemberFollow mf where mf.from.id = :fromMemberId")
fun getFolloweeIds(@Param("fromMemberId") fromMemberId: Long): List<Long>

@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<Long>

@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
}
13 changes: 12 additions & 1 deletion src/main/kotlin/zip/cafe/service/FeedService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -14,7 +17,15 @@ class FeedService(
) {

fun getReviewFeeds(loginMemberId: Long, minReviewIdInFeed: Long?, limit: Long): FeedWithPagination {
val followeeIds = memberFollowRepository.getFolloweeIds(loginMemberId)
val followeeIds :MutableList<Long> = 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 })
Expand Down

0 comments on commit 1ba170b

Please sign in to comment.