From d62dfb7c3f14907b797a4c9d103c4b34e1e7868c Mon Sep 17 00:00:00 2001 From: maark1106 Date: Sat, 13 Sep 2025 15:29:46 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20university=5Fid,=20category=5Fid,=20pin?= =?UTF-8?q?ned,=20created=5Fdate=20=EA=B8=B0=EC=A4=80=20=EB=B3=B5=ED=95=A9?= =?UTF-8?q?=20=EC=9D=B8=EB=8D=B1=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feed/repository/FeedRepository.java | 29 +++++++++++++++++-- .../buddyya/feed/service/FeedService.java | 11 +++++-- ...versity_category_pinned_created_index.sql | 2 ++ 3 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/db/migration/V32__Add_feed_university_category_pinned_created_index.sql 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);