From 4533a2ec3a7c9d5a228017b2e06e2c4c3a1fd675 Mon Sep 17 00:00:00 2001 From: GiJungPark Date: Mon, 8 Dec 2025 00:37:45 +0900 Subject: [PATCH] =?UTF-8?q?[REFACTOR]=20=EA=B3=B5=EC=A7=80=EC=82=AC?= =?UTF-8?q?=ED=95=AD=20=ED=8E=98=EC=9D=B4=EC=A7=80=EB=84=A4=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=EC=A0=95=EB=A0=AC=20=EA=B8=B0=EC=A4=80=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/mysql/notice/NoticeEntityRepository.kt | 16 ++++++++++++---- .../db/mysql/notice/NoticeJpaRepository.kt | 10 ++++++++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/dmforu-infrastructure/storage/mysql/src/main/kotlin/com/dmforu/storage/db/mysql/notice/NoticeEntityRepository.kt b/dmforu-infrastructure/storage/mysql/src/main/kotlin/com/dmforu/storage/db/mysql/notice/NoticeEntityRepository.kt index 288b1f2..56cf4d4 100644 --- a/dmforu-infrastructure/storage/mysql/src/main/kotlin/com/dmforu/storage/db/mysql/notice/NoticeEntityRepository.kt +++ b/dmforu-infrastructure/storage/mysql/src/main/kotlin/com/dmforu/storage/db/mysql/notice/NoticeEntityRepository.kt @@ -23,7 +23,7 @@ internal class NoticeEntityRepository( page: Int, size: Int, ): List { - val pageable = pageRequest(page, size) + val pageable = createPageRequestByDateAndIdDesc(page, size) val noticePage = noticeJpaRepository.findBySearchWordAndDepartment(searchWord, department, pageable) return noticePage.map { it.toNotice() }.toList() } @@ -33,13 +33,13 @@ internal class NoticeEntityRepository( page: Int, size: Int, ): List { - val pageable = pageRequest(page, size) + val pageable = createPageRequestByNumberDesc(page, size) val departmentNoticePage = noticeJpaRepository.findByType(department, pageable) return departmentNoticePage.map { it.toNotice() }.toList() } override fun findUniversityNotices(page: Int, size: Int): List { - val pageable = pageRequest(page, size) + val pageable = createPageRequestByNumberDesc(page, size) val universityNoticePage = noticeJpaRepository.findByType("대학", pageable) return universityNoticePage.map { it.toNotice() }.toList() } @@ -48,7 +48,15 @@ internal class NoticeEntityRepository( return noticeJpaRepository.findMaxNumberByType(type) } - private fun pageRequest(page: Int, size: Int): PageRequest { + private fun createPageRequestByNumberDesc(page: Int, size: Int): PageRequest { + return PageRequest.of( + page - 1, size, Sort.by( + Sort.Order.desc("number") + ) + ) + } + + private fun createPageRequestByDateAndIdDesc(page: Int, size: Int): PageRequest { return PageRequest.of( page - 1, size, Sort.by( Sort.Order.desc("date"), diff --git a/dmforu-infrastructure/storage/mysql/src/main/kotlin/com/dmforu/storage/db/mysql/notice/NoticeJpaRepository.kt b/dmforu-infrastructure/storage/mysql/src/main/kotlin/com/dmforu/storage/db/mysql/notice/NoticeJpaRepository.kt index aa72c93..52b11ff 100644 --- a/dmforu-infrastructure/storage/mysql/src/main/kotlin/com/dmforu/storage/db/mysql/notice/NoticeJpaRepository.kt +++ b/dmforu-infrastructure/storage/mysql/src/main/kotlin/com/dmforu/storage/db/mysql/notice/NoticeJpaRepository.kt @@ -7,7 +7,8 @@ import org.springframework.data.jpa.repository.Query import org.springframework.data.repository.query.Param internal interface NoticeJpaRepository : JpaRepository { - /** 원하는 타입의 가장 최신 공지사항 번호를 확인하는 메서드 + /** + * 원하는 타입의 가장 최신 공지사항 번호를 확인하는 메서드 * * @Param type (학과 이름 또는 대학) * @Return type에 알맞는 최신 공지사항 번호, 만약 공지사항이 존재하지 않다면 Null을 반환한다. @@ -33,7 +34,12 @@ internal interface NoticeJpaRepository : JpaRepository { * @return 키워드에 맞는 공지사항 페이지 */ @Query( - value = "SELECT * FROM notice WHERE REPLACE(title, ' ', '') LIKE CONCAT('%', REPLACE(?1, ' ', ''), '%') AND type IN (?2, '대학')", + value = """ + SELECT * + FROM notice + WHERE MATCH(title) AGAINST (?1 IN NATURAL LANGUAGE MODE) + ORDER BY date DESC, id DESC + """, nativeQuery = true ) fun findBySearchWordAndDepartment(searchWord: String, department: String, pageable: Pageable): Page