feat: ScheduleId를 이용한 ScheduleOverview 단건 조회 기능 추가

This commit is contained in:
이상진 2025-09-19 18:00:09 +09:00
parent 86aa4c3046
commit 5a6f7c4763
3 changed files with 57 additions and 0 deletions

View File

@ -69,6 +69,16 @@ class ScheduleService(
throw ScheduleException(ScheduleErrorCode.SCHEDULE_NOT_AVAILABLE)
}
@Transactional(readOnly = true)
fun findScheduleOverviewById(id: Long): ScheduleOverviewResponse {
val overview: ScheduleOverview = scheduleRepository.findOverviewByIdOrNull(id) ?: run {
log.warn { "[ScheduleService.findScheduleOverview] 일정 개요 조회 실패: id=$id" }
throw ScheduleException(ScheduleErrorCode.SCHEDULE_NOT_FOUND)
}
return overview.toOverviewResponse()
}
// ========================================
// All-Admin (본사, 매장 모두 사용가능)
// ========================================

View File

@ -53,4 +53,29 @@ interface ScheduleRepository : JpaRepository<ScheduleEntity, Long> {
date: LocalDate,
themeId: Long? = null
): List<ScheduleOverview>
@Query("""
SELECT
new roomescape.schedule.business.domain.ScheduleOverview(
s._id,
st._id,
st.name,
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
JOIN
StoreEntity st ON st._id = s.storeId
WHERE
s._id = :id
""")
fun findOverviewByIdOrNull(id: Long): ScheduleOverview?
}

View File

@ -54,3 +54,25 @@ fun ScheduleEntity.toSummaryResponse() = ScheduleSummaryResponse(
themeId = this.themeId,
status = this.status
)
data class ScheduleOverviewResponse(
val id: Long,
val storeId: Long,
val storeName: String,
val date: LocalDate,
val startFrom: LocalTime,
val endAt: LocalTime,
val themeId: Long,
val themeName: String,
)
fun ScheduleOverview.toOverviewResponse() = ScheduleOverviewResponse(
id = this.id,
storeId = this.storeId,
storeName = this.storeName,
date = this.date,
startFrom = this.time,
endAt = this.getEndAt(),
themeId = this.themeId,
themeName = this.themeName,
)