[#56] 예약 & 결제 프로세스 및 패키지 구조 재정의 #57

Merged
pricelees merged 45 commits from refactor/#56 into main 2025-10-09 09:33:29 +00:00
10 changed files with 107 additions and 98 deletions
Showing only changes of commit 07263426b2 - Show all commits

View File

@ -9,8 +9,9 @@ import com.sangdol.roomescape.reservation.exception.ReservationException
import com.sangdol.roomescape.reservation.infrastructure.persistence.* import com.sangdol.roomescape.reservation.infrastructure.persistence.*
import com.sangdol.roomescape.reservation.web.* import com.sangdol.roomescape.reservation.web.*
import com.sangdol.roomescape.schedule.business.ScheduleService import com.sangdol.roomescape.schedule.business.ScheduleService
import com.sangdol.roomescape.schedule.dto.ScheduleStateResponse
import com.sangdol.roomescape.schedule.dto.ScheduleWithThemeAndStoreResponse
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
import com.sangdol.roomescape.schedule.web.ScheduleOverviewResponse
import com.sangdol.roomescape.theme.business.ThemeService import com.sangdol.roomescape.theme.business.ThemeService
import com.sangdol.roomescape.user.business.UserService import com.sangdol.roomescape.user.business.UserService
import com.sangdol.roomescape.user.dto.UserContactResponse import com.sangdol.roomescape.user.dto.UserContactResponse
@ -43,7 +44,7 @@ class ReservationService(
log.info { "[createPendingReservation] Pending 예약 생성 시작: schedule=${request.scheduleId}" } log.info { "[createPendingReservation] Pending 예약 생성 시작: schedule=${request.scheduleId}" }
run { run {
val schedule = scheduleService.findSummaryWithLock(request.scheduleId) val schedule: ScheduleStateResponse = scheduleService.findStateWithLock(request.scheduleId)
val theme = themeService.findInfoById(schedule.themeId) val theme = themeService.findInfoById(schedule.themeId)
reservationValidator.validateCanCreate(schedule, theme, request) reservationValidator.validateCanCreate(schedule, theme, request)
@ -103,8 +104,16 @@ class ReservationService(
) )
return ReservationOverviewListResponse(reservations.map { return ReservationOverviewListResponse(reservations.map {
val schedule: ScheduleOverviewResponse = scheduleService.findScheduleOverviewById(it.scheduleId) val response: ScheduleWithThemeAndStoreResponse = scheduleService.findWithThemeAndStore(it.scheduleId)
it.toOverviewResponse(schedule) val schedule = response.schedule
it.toOverviewResponse(
scheduleDate = schedule.date,
scheduleStartFrom = schedule.startFrom,
scheduleEndAt = schedule.endAt,
storeName = response.theme.name,
themeName = response.store.name
)
}).also { }).also {
log.info { "[findSummaryByMemberId] ${it.reservations.size}개의 예약 조회 완료: userId=${user.id}" } log.info { "[findSummaryByMemberId] ${it.reservations.size}개의 예약 조회 완료: userId=${user.id}" }
} }

View File

@ -5,8 +5,8 @@ import com.sangdol.common.utils.toKoreaDateTime
import com.sangdol.roomescape.reservation.exception.ReservationErrorCode import com.sangdol.roomescape.reservation.exception.ReservationErrorCode
import com.sangdol.roomescape.reservation.exception.ReservationException import com.sangdol.roomescape.reservation.exception.ReservationException
import com.sangdol.roomescape.reservation.web.PendingReservationCreateRequest import com.sangdol.roomescape.reservation.web.PendingReservationCreateRequest
import com.sangdol.roomescape.schedule.dto.ScheduleStateResponse
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
import com.sangdol.roomescape.schedule.dto.ScheduleSummaryResponse
import com.sangdol.roomescape.theme.dto.ThemeInfoResponse import com.sangdol.roomescape.theme.dto.ThemeInfoResponse
import io.github.oshai.kotlinlogging.KLogger import io.github.oshai.kotlinlogging.KLogger
import io.github.oshai.kotlinlogging.KotlinLogging import io.github.oshai.kotlinlogging.KotlinLogging
@ -20,14 +20,14 @@ private val log: KLogger = KotlinLogging.logger {}
class ReservationValidator { class ReservationValidator {
fun validateCanCreate( fun validateCanCreate(
schedule: ScheduleSummaryResponse, schedule: ScheduleStateResponse,
theme: ThemeInfoResponse, theme: ThemeInfoResponse,
request: PendingReservationCreateRequest request: PendingReservationCreateRequest
) { ) {
validateSchedule(schedule) validateSchedule(schedule)
validateReservationInfo(theme, request) validateReservationInfo(theme, request)
} }
private fun validateSchedule(schedule: ScheduleSummaryResponse) { private fun validateSchedule(schedule: ScheduleStateResponse) {
if (schedule.status != ScheduleStatus.HOLD) { if (schedule.status != ScheduleStatus.HOLD) {
log.info { "[validateCanCreate] ${schedule.status}로의 일정 상태 변경에 따른 실패" } log.info { "[validateCanCreate] ${schedule.status}로의 일정 상태 변경에 따른 실패" }
throw ReservationException(ReservationErrorCode.EXPIRED_HELD_SCHEDULE) throw ReservationException(ReservationErrorCode.EXPIRED_HELD_SCHEDULE)
@ -40,7 +40,7 @@ class ReservationValidator {
throw ReservationException(ReservationErrorCode.EXPIRED_HELD_SCHEDULE) throw ReservationException(ReservationErrorCode.EXPIRED_HELD_SCHEDULE)
} }
val scheduleDateTime = LocalDateTime.of(schedule.date, schedule.time) val scheduleDateTime = LocalDateTime.of(schedule.date, schedule.startFrom)
val nowDateTime = KoreaDateTime.now() val nowDateTime = KoreaDateTime.now()
if (scheduleDateTime.isBefore(nowDateTime)) { if (scheduleDateTime.isBefore(nowDateTime)) {
log.info { "[validateCanCreate] 과거 시간인 일정으로 인한 실패: scheduleDateTime=${scheduleDateTime}(KST), now=${nowDateTime}" } log.info { "[validateCanCreate] 과거 시간인 일정으로 인한 실패: scheduleDateTime=${scheduleDateTime}(KST), now=${nowDateTime}" }

View File

@ -3,7 +3,6 @@ package com.sangdol.roomescape.reservation.web
import com.sangdol.roomescape.payment.web.PaymentWithDetailResponse import com.sangdol.roomescape.payment.web.PaymentWithDetailResponse
import com.sangdol.roomescape.reservation.infrastructure.persistence.ReservationEntity import com.sangdol.roomescape.reservation.infrastructure.persistence.ReservationEntity
import com.sangdol.roomescape.reservation.infrastructure.persistence.ReservationStatus import com.sangdol.roomescape.reservation.infrastructure.persistence.ReservationStatus
import com.sangdol.roomescape.schedule.web.ScheduleOverviewResponse
import com.sangdol.roomescape.user.dto.UserContactResponse import com.sangdol.roomescape.user.dto.UserContactResponse
import jakarta.validation.constraints.NotEmpty import jakarta.validation.constraints.NotEmpty
import java.time.Instant import java.time.Instant
@ -46,14 +45,18 @@ data class ReservationOverviewResponse(
) )
fun ReservationEntity.toOverviewResponse( fun ReservationEntity.toOverviewResponse(
schedule: ScheduleOverviewResponse scheduleDate: LocalDate,
scheduleStartFrom: LocalTime,
scheduleEndAt: LocalTime,
storeName: String,
themeName: String
) = ReservationOverviewResponse( ) = ReservationOverviewResponse(
id = this.id, id = this.id,
storeName = schedule.storeName, storeName = storeName,
themeName = schedule.themeName, themeName = themeName,
date = schedule.date, date = scheduleDate,
startFrom = schedule.startFrom, startFrom = scheduleStartFrom,
endAt = schedule.endAt, endAt = scheduleEndAt,
status = this.status status = this.status
) )

View File

@ -15,7 +15,7 @@ import com.sangdol.roomescape.schedule.exception.ScheduleException
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntity import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntity
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntityFactory import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntityFactory
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleRepository import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleRepository
import com.sangdol.roomescape.schedule.mapper.toAdminSummaryListResponse import com.sangdol.roomescape.schedule.mapper.toAdminSummaryResponse
import io.github.oshai.kotlinlogging.KLogger import io.github.oshai.kotlinlogging.KLogger
import io.github.oshai.kotlinlogging.KotlinLogging import io.github.oshai.kotlinlogging.KotlinLogging
import org.springframework.data.repository.findByIdOrNull import org.springframework.data.repository.findByIdOrNull
@ -32,9 +32,6 @@ class AdminScheduleService(
private val idGenerator: IDGenerator, private val idGenerator: IDGenerator,
private val adminService: AdminService private val adminService: AdminService
) { ) {
// ========================================
// All-Admin (본사, 매장 모두 사용가능)
// ========================================
@Transactional(readOnly = true) @Transactional(readOnly = true)
fun searchSchedules(storeId: Long, date: LocalDate?, themeId: Long?): AdminScheduleSummaryListResponse { fun searchSchedules(storeId: Long, date: LocalDate?, themeId: Long?): AdminScheduleSummaryListResponse {
log.info { "[searchSchedules] 일정 검색 시작: storeId=$storeId, date=$date, themeId=$themeId" } log.info { "[searchSchedules] 일정 검색 시작: storeId=$storeId, date=$date, themeId=$themeId" }
@ -46,7 +43,7 @@ class AdminScheduleService(
.filter { (themeId == null) || (it.themeId == themeId) } .filter { (themeId == null) || (it.themeId == themeId) }
.sortedBy { it.time } .sortedBy { it.time }
return schedules.toAdminSummaryListResponse() return schedules.toAdminSummaryResponse()
.also { .also {
log.info { "[searchSchedules] ${it.schedules.size} 개의 일정 조회 완료" } log.info { "[searchSchedules] ${it.schedules.size} 개의 일정 조회 완료" }
} }
@ -65,9 +62,6 @@ class AdminScheduleService(
.also { log.info { "[findDetail] 일정 감사 정보 조회 완료: id=$id" } } .also { log.info { "[findDetail] 일정 감사 정보 조회 완료: id=$id" } }
} }
// ========================================
// Store-Admin (매장 관리자 로그인 필요)
// ========================================
@Transactional @Transactional
fun createSchedule(storeId: Long, request: ScheduleCreateRequest): ScheduleCreateResponse { fun createSchedule(storeId: Long, request: ScheduleCreateRequest): ScheduleCreateResponse {
log.info { "[createSchedule] 일정 생성 시작: storeId=${storeId}, date=${request.date}, time=${request.time}, themeId=${request.themeId}" } log.info { "[createSchedule] 일정 생성 시작: storeId=${storeId}, date=${request.date}, time=${request.time}, themeId=${request.themeId}" }

View File

@ -1,32 +1,21 @@
package com.sangdol.roomescape.schedule.business package com.sangdol.roomescape.schedule.business
import com.sangdol.common.persistence.IDGenerator
import com.sangdol.common.utils.KoreaDate import com.sangdol.common.utils.KoreaDate
import com.sangdol.common.utils.KoreaTime import com.sangdol.common.utils.KoreaTime
import com.sangdol.roomescape.admin.business.AdminService
import com.sangdol.roomescape.common.types.AuditingInfo
import com.sangdol.roomescape.common.types.Auditor
import com.sangdol.roomescape.schedule.business.domain.ScheduleOverview import com.sangdol.roomescape.schedule.business.domain.ScheduleOverview
import com.sangdol.roomescape.schedule.dto.AdminScheduleSummaryListResponse import com.sangdol.roomescape.schedule.dto.ScheduleStateResponse
import com.sangdol.roomescape.schedule.dto.ScheduleCreateRequest import com.sangdol.roomescape.schedule.dto.ScheduleWithThemeAndStoreResponse
import com.sangdol.roomescape.schedule.dto.ScheduleCreateResponse
import com.sangdol.roomescape.schedule.dto.ScheduleOverviewResponse
import com.sangdol.roomescape.schedule.dto.ScheduleSummaryResponse
import com.sangdol.roomescape.schedule.dto.ScheduleUpdateRequest
import com.sangdol.roomescape.schedule.dto.ScheduleWithThemeListResponse import com.sangdol.roomescape.schedule.dto.ScheduleWithThemeListResponse
import com.sangdol.roomescape.schedule.mapper.toAdminSummaryListResponse
import com.sangdol.roomescape.schedule.mapper.toOverviewResponse
import com.sangdol.roomescape.schedule.mapper.toResponse
import com.sangdol.roomescape.schedule.mapper.toSummaryResponse
import com.sangdol.roomescape.schedule.exception.ScheduleErrorCode import com.sangdol.roomescape.schedule.exception.ScheduleErrorCode
import com.sangdol.roomescape.schedule.exception.ScheduleException import com.sangdol.roomescape.schedule.exception.ScheduleException
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntity import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntity
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntityFactory
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleRepository import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleRepository
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
import com.sangdol.roomescape.schedule.mapper.toResponseWithTheme
import com.sangdol.roomescape.schedule.mapper.toResponseWithThemeAndStore
import com.sangdol.roomescape.schedule.mapper.toStateResponse
import io.github.oshai.kotlinlogging.KLogger import io.github.oshai.kotlinlogging.KLogger
import io.github.oshai.kotlinlogging.KotlinLogging import io.github.oshai.kotlinlogging.KotlinLogging
import org.springframework.data.repository.findByIdOrNull
import org.springframework.stereotype.Service import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional import org.springframework.transaction.annotation.Transactional
import java.time.LocalDate import java.time.LocalDate
@ -55,7 +44,7 @@ class ScheduleService(
scheduleRepository.findStoreSchedulesWithThemeByDate(storeId, date) scheduleRepository.findStoreSchedulesWithThemeByDate(storeId, date)
.filter { it.date.isAfter(currentDate) || it.time.isAfter(currentTime) } .filter { it.date.isAfter(currentDate) || it.time.isAfter(currentTime) }
return schedules.toResponse() return schedules.toResponseWithTheme()
.also { .also {
log.info { "[getStoreScheduleByDate] storeId=${storeId}, date=$date${it.schedules.size}개 일정 조회 완료" } log.info { "[getStoreScheduleByDate] storeId=${storeId}, date=$date${it.schedules.size}개 일정 조회 완료" }
} }
@ -79,7 +68,7 @@ class ScheduleService(
} }
@Transactional(readOnly = true) @Transactional(readOnly = true)
fun findSummaryWithLock(id: Long): ScheduleSummaryResponse { fun findStateWithLock(id: Long): ScheduleStateResponse {
log.info { "[findDateTimeById] 일정 개요 조회 시작 : id=$id" } log.info { "[findDateTimeById] 일정 개요 조회 시작 : id=$id" }
val schedule: ScheduleEntity = scheduleRepository.findByIdForUpdate(id) val schedule: ScheduleEntity = scheduleRepository.findByIdForUpdate(id)
@ -88,20 +77,20 @@ class ScheduleService(
throw ScheduleException(ScheduleErrorCode.SCHEDULE_NOT_FOUND) throw ScheduleException(ScheduleErrorCode.SCHEDULE_NOT_FOUND)
} }
return schedule.toSummaryResponse() return schedule.toStateResponse()
.also { .also {
log.info { "[findDateTimeById] 일정 개요 조회 완료: id=$id" } log.info { "[findDateTimeById] 일정 개요 조회 완료: id=$id" }
} }
} }
@Transactional(readOnly = true) @Transactional(readOnly = true)
fun findScheduleOverviewById(id: Long): ScheduleOverviewResponse { fun findWithThemeAndStore(id: Long): ScheduleWithThemeAndStoreResponse {
val overview: ScheduleOverview = scheduleRepository.findOverviewByIdOrNull(id) ?: run { val overview: ScheduleOverview = scheduleRepository.findOverviewByIdOrNull(id) ?: run {
log.warn { "[findScheduleOverview] 일정 개요 조회 실패: id=$id" } log.warn { "[findScheduleOverview] 일정 개요 조회 실패: id=$id" }
throw ScheduleException(ScheduleErrorCode.SCHEDULE_NOT_FOUND) throw ScheduleException(ScheduleErrorCode.SCHEDULE_NOT_FOUND)
} }
return overview.toOverviewResponse() return overview.toResponseWithThemeAndStore()
} }
@Transactional @Transactional

View File

@ -1,40 +1,47 @@
package com.sangdol.roomescape.schedule.dto package com.sangdol.roomescape.schedule.dto
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
import com.sangdol.roomescape.theme.infrastructure.persistence.Difficulty
import java.time.Instant import java.time.Instant
import java.time.LocalDate import java.time.LocalDate
import java.time.LocalTime import java.time.LocalTime
data class ScheduleWithThemeResponse( data class ScheduleResponse(
val id: Long, val id: Long,
val date: LocalDate,
val startFrom: LocalTime, val startFrom: LocalTime,
val endAt: LocalTime, val endAt: LocalTime,
val themeId: Long, val status: ScheduleStatus,
val themeName: String,
val themeDifficulty: Difficulty,
val status: ScheduleStatus
) )
data class ScheduleWithThemeListResponse( data class ScheduleStateResponse(
val schedules: List<ScheduleWithThemeResponse>
)
data class ScheduleSummaryResponse(
val date: LocalDate, val date: LocalDate,
val time: LocalTime, val startFrom: LocalTime,
val themeId: Long, val themeId: Long,
val status: ScheduleStatus, val status: ScheduleStatus,
val holdExpiredAt: Instant? = null val holdExpiredAt: Instant? = null
) )
data class ScheduleOverviewResponse( data class ScheduleThemeInfo(
val id: Long, val id: Long,
val storeId: Long, val name: String
val storeName: String, )
val date: LocalDate,
val startFrom: LocalTime, data class ScheduleStoreInfo(
val endAt: LocalTime, val id: Long,
val themeId: Long, val name: String
val themeName: String, )
data class ScheduleWithThemeResponse(
val schedule: ScheduleResponse,
val theme: ScheduleThemeInfo,
)
data class ScheduleWithThemeAndStoreResponse(
val schedule: ScheduleResponse,
val theme: ScheduleThemeInfo,
val store: ScheduleStoreInfo
)
data class ScheduleWithThemeListResponse(
val schedules: List<ScheduleWithThemeResponse>
) )

View File

@ -1,6 +1,7 @@
package com.sangdol.roomescape.schedule.mapper package com.sangdol.roomescape.schedule.mapper
import com.sangdol.roomescape.schedule.business.domain.ScheduleOverview import com.sangdol.roomescape.schedule.business.domain.ScheduleOverview
import com.sangdol.roomescape.schedule.dto.AdminScheduleSummaryListResponse
import com.sangdol.roomescape.schedule.dto.AdminScheduleSummaryResponse import com.sangdol.roomescape.schedule.dto.AdminScheduleSummaryResponse
fun ScheduleOverview.toAdminSummaryResponse() = AdminScheduleSummaryResponse( fun ScheduleOverview.toAdminSummaryResponse() = AdminScheduleSummaryResponse(
@ -10,3 +11,7 @@ fun ScheduleOverview.toAdminSummaryResponse() = AdminScheduleSummaryResponse(
endAt = this.getEndAt(), endAt = this.getEndAt(),
status = this.status status = this.status
) )
fun List<ScheduleOverview>.toAdminSummaryResponse() = AdminScheduleSummaryListResponse(
this.map { it.toAdminSummaryResponse() }
)

View File

@ -4,39 +4,25 @@ import com.sangdol.roomescape.schedule.business.domain.ScheduleOverview
import com.sangdol.roomescape.schedule.dto.* import com.sangdol.roomescape.schedule.dto.*
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntity import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntity
fun ScheduleOverview.toOverviewResponse() = ScheduleOverviewResponse( fun ScheduleEntity.toStateResponse() = ScheduleStateResponse(
id = this.id,
storeId = this.storeId,
storeName = this.storeName,
date = this.date, date = this.date,
startFrom = this.time, startFrom = this.time,
endAt = this.getEndAt(),
themeId = this.themeId,
themeName = this.themeName,
)
fun ScheduleEntity.toSummaryResponse() = ScheduleSummaryResponse(
date = this.date,
time = this.time,
themeId = this.themeId, themeId = this.themeId,
status = this.status, status = this.status,
holdExpiredAt = this.holdExpiredAt holdExpiredAt = this.holdExpiredAt
) )
fun ScheduleOverview.toResponse() = ScheduleWithThemeResponse( fun ScheduleOverview.toResponseWithThemeAndStore() = ScheduleWithThemeAndStoreResponse(
id = this.id, schedule = ScheduleResponse(this.id, this.date, this.time, this.getEndAt(), this.status),
startFrom = this.time, theme = ScheduleThemeInfo(this.themeId, this.themeName),
endAt = this.getEndAt(), store = ScheduleStoreInfo(this.storeId, this.storeName),
themeId = this.themeId,
themeName = this.themeName,
themeDifficulty = this.themeDifficulty,
status = this.status
) )
fun List<ScheduleOverview>.toAdminSummaryListResponse() = AdminScheduleSummaryListResponse( fun ScheduleOverview.toResponseWithTheme() = ScheduleWithThemeResponse(
this.map { it.toAdminSummaryResponse() } schedule = ScheduleResponse(this.id, this.date, this.time, this.getEndAt(), this.status),
theme = ScheduleThemeInfo(this.themeId, this.themeName),
) )
fun List<ScheduleOverview>.toResponse() = ScheduleWithThemeListResponse( fun List<ScheduleOverview>.toResponseWithTheme() = ScheduleWithThemeListResponse(
this.map { it.toResponse() } this.map { it.toResponseWithTheme() }
) )

View File

@ -58,16 +58,30 @@ class ScheduleApiTest(
body("data.schedules.size()", equalTo(size)) body("data.schedules.size()", equalTo(size))
assertProperties( assertProperties(
props = setOf( props = setOf(
"id", "schedule",
"startFrom", "theme"
"endAt",
"themeId",
"themeName",
"themeDifficulty",
"status"
), ),
propsNameIfList = "schedules" propsNameIfList = "schedules"
) )
assertProperties(
props = setOf(
"id",
"date",
"startFrom",
"endAt",
"status"
),
propsNameIfList = "schedules.schedule"
)
assertProperties(
props = setOf(
"id",
"name",
),
propsNameIfList = "schedules.theme"
)
} }
) )
} }

View File

@ -1,6 +1,7 @@
package com.sangdol.roomescape.schedule package com.sangdol.roomescape.schedule
import com.sangdol.common.utils.MdcPrincipalIdUtil import com.sangdol.common.utils.MdcPrincipalIdUtil
import com.sangdol.roomescape.schedule.business.AdminScheduleService
import com.sangdol.roomescape.schedule.business.ScheduleService import com.sangdol.roomescape.schedule.business.ScheduleService
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleRepository import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleRepository
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
@ -19,6 +20,7 @@ import java.time.LocalDate
import java.time.LocalTime import java.time.LocalTime
class ScheduleServiceTest( class ScheduleServiceTest(
private val adminScheduleService: AdminScheduleService,
private val scheduleService: ScheduleService, private val scheduleService: ScheduleService,
private val scheduleRepository: ScheduleRepository private val scheduleRepository: ScheduleRepository
) : FunSpecSpringbootTest() { ) : FunSpecSpringbootTest() {
@ -37,7 +39,7 @@ class ScheduleServiceTest(
} }
} }
scheduleService.updateSchedule( adminScheduleService.updateSchedule(
createdScheduleId, createdScheduleId,
ScheduleUpdateRequest(status = ScheduleStatus.RESERVED) ScheduleUpdateRequest(status = ScheduleStatus.RESERVED)
) )
@ -107,7 +109,7 @@ class ScheduleServiceTest(
store.id to theme.id store.id to theme.id
} }
return scheduleService.createSchedule( return adminScheduleService.createSchedule(
storeId = storeId, storeId = storeId,
request = ScheduleCreateRequest( request = ScheduleCreateRequest(
date = LocalDate.now().plusDays(1), date = LocalDate.now().plusDays(1),