diff --git a/src/main/java/com/team/buddyya/feed/repository/FeedRepository.java b/src/main/java/com/team/buddyya/feed/repository/FeedRepository.java index 28891d92..adf964af 100644 --- a/src/main/java/com/team/buddyya/feed/repository/FeedRepository.java +++ b/src/main/java/com/team/buddyya/feed/repository/FeedRepository.java @@ -4,16 +4,41 @@ import com.team.buddyya.feed.domain.Feed; import com.team.buddyya.student.domain.Student; import com.team.buddyya.student.domain.University; + +import java.time.LocalDateTime; import java.util.List; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @Repository public interface FeedRepository extends JpaRepository { - Page findAllByUniversityAndCategory(University university, Category category, Pageable pageable); + @Query(""" + SELECT f + FROM Feed f + WHERE f.university = :university + AND f.category = :category + ORDER BY f.pinned DESC, f.createdDate DESC + """) + Page findFeedsByUnivAndCategory(@Param("university") University university, + @Param("category") Category category, + Pageable pageable); + + + @Query(""" + SELECT f + FROM Feed f + WHERE f.university = :university + AND f.category = :category + ORDER BY f.likeCount DESC, f.createdDate DESC + """) + Page findPopularFeedsByUnivAndCategory(@Param("university") University university, + @Param("category") Category category, + Pageable pageable); Page findAllByStudent(Student student, Pageable pageable); @@ -29,4 +54,4 @@ Page findByLikeCountGreaterThanEqualAndUniversity( University university, Pageable pageable ); -} +} \ No newline at end of file diff --git a/src/main/java/com/team/buddyya/feed/service/FeedService.java b/src/main/java/com/team/buddyya/feed/service/FeedService.java index 771dd3cf..1a5566bf 100644 --- a/src/main/java/com/team/buddyya/feed/service/FeedService.java +++ b/src/main/java/com/team/buddyya/feed/service/FeedService.java @@ -107,10 +107,15 @@ Page getFeedsByUniversityAndCategory(FeedListRequest request, Pageable pag Category category = categoryService.getCategory(request.category()); Pageable customPageable = PageRequest.of( pageable.getPageNumber(), - pageable.getPageSize(), - getSortBy(category) + pageable.getPageSize() ); - return feedRepository.findAllByUniversityAndCategory(university, category, customPageable); + Page feeds; + if (category.getName().equals("POPULAR")) { + feeds = feedRepository.findPopularFeedsByUnivAndCategory(university, category, customPageable); + } else { + feeds = feedRepository.findFeedsByUnivAndCategory(university, category, customPageable); + } + return feeds; } @Transactional(readOnly = true) diff --git a/src/main/resources/db/migration/V32__Add_feed_university_category_pinned_created_index.sql b/src/main/resources/db/migration/V32__Add_feed_university_category_pinned_created_index.sql new file mode 100644 index 00000000..f0a13a26 --- /dev/null +++ b/src/main/resources/db/migration/V32__Add_feed_university_category_pinned_created_index.sql @@ -0,0 +1,2 @@ +CREATE INDEX idx_feed_uni_cat_order + ON feed (university_id, category_id, pinned DESC, created_date DESC);