From eec279c76fb9130ba6e708f05b2d0a3451df9c3b Mon Sep 17 00:00:00 2001 From: pricelees Date: Wed, 17 Sep 2025 10:34:35 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20Repository=EC=97=90=20ScheduleWithTheme?= =?UTF-8?q?Summary=20=EC=A1=B0=ED=9A=8C=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/ScheduleRepository.kt | 35 ++++++++++++++----- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/roomescape/schedule/infrastructure/persistence/ScheduleRepository.kt b/src/main/kotlin/roomescape/schedule/infrastructure/persistence/ScheduleRepository.kt index 98c3d960..1227edff 100644 --- a/src/main/kotlin/roomescape/schedule/infrastructure/persistence/ScheduleRepository.kt +++ b/src/main/kotlin/roomescape/schedule/infrastructure/persistence/ScheduleRepository.kt @@ -2,23 +2,40 @@ package roomescape.schedule.infrastructure.persistence import org.springframework.data.jpa.repository.JpaRepository import org.springframework.data.jpa.repository.Query +import roomescape.schedule.business.domain.ScheduleWithThemeSummary import java.time.LocalDate import java.time.LocalTime interface ScheduleRepository : JpaRepository { - fun findAllByDate(date: LocalDate): List - - fun findAllByDateAndThemeId(date: LocalDate, themeId: Long): List - fun existsByDateAndThemeIdAndTime(date: LocalDate, themeId: Long, time: LocalTime): Boolean @Query( """ - SELECT DISTINCT s.themeId - FROM ScheduleEntity s - WHERE s.date = :date - """ + SELECT + new roomescape.schedule.business.domain.ScheduleWithThemeSummary( + s._id, + s.date, + s.time, + t._id, + t.name, + t.difficulty, + t.availableMinutes, + s.status + ) + FROM + ScheduleEntity s + JOIN + ThemeEntity t ON t._id = s.themeId + WHERE + s.storeId = :storeId + AND s.date = :date + AND (:themeId IS NULL OR s.themeId = :themeId) + """ ) - fun findAllUniqueThemeIdByDate(date: LocalDate): List + fun findStoreSchedulesWithThemeByDate( + storeId: Long, + date: LocalDate, + themeId: Long? = null + ): List }