generated from pricelees/issue-pr-template
105 lines
4.4 KiB
Kotlin
105 lines
4.4 KiB
Kotlin
package roomescape.reservation.business
|
|
|
|
import io.github.oshai.kotlinlogging.KLogger
|
|
import io.github.oshai.kotlinlogging.KotlinLogging
|
|
import jakarta.transaction.Transactional
|
|
import org.springframework.stereotype.Service
|
|
import roomescape.reservation.implement.ReservationFinder
|
|
import roomescape.reservation.implement.ReservationWriter
|
|
import roomescape.reservation.infrastructure.persistence.ReservationEntity
|
|
import roomescape.reservation.infrastructure.persistence.ReservationStatus
|
|
import roomescape.reservation.web.*
|
|
|
|
private val log: KLogger = KotlinLogging.logger {}
|
|
|
|
@Service
|
|
@Transactional
|
|
class ReservationWriteService(
|
|
private val reservationFinder: ReservationFinder,
|
|
private val reservationWriter: ReservationWriter
|
|
) {
|
|
fun createReservationWithPayment(
|
|
request: ReservationCreateWithPaymentRequest,
|
|
memberId: Long
|
|
): ReservationEntity {
|
|
log.debug { "[ReservationCommandService.createReservationByAdmin] 시작: date=${request.date}, timeId=${request.timeId}, themeId=${request.themeId}, memberId=${memberId}" }
|
|
|
|
val created: ReservationEntity = reservationWriter.create(
|
|
date = request.date,
|
|
timeId = request.timeId,
|
|
themeId = request.themeId,
|
|
status = ReservationStatus.CONFIRMED,
|
|
memberId = memberId,
|
|
requesterId = memberId
|
|
)
|
|
|
|
return created.also {
|
|
log.info { "[ReservationCommandService.createReservationByAdmin] 완료: reservationId=${it.id}" }
|
|
}
|
|
}
|
|
|
|
fun createReservationByAdmin(
|
|
request: AdminReservationCreateRequest,
|
|
memberId: Long
|
|
): ReservationCreateResponse {
|
|
log.debug { "[ReservationCommandService.createReservationByAdmin] 시작: date=${request.date}, timeId=${request.timeId}, themeId=${request.themeId}, memberId=${request.memberId} by adminId=${memberId}" }
|
|
|
|
val created: ReservationEntity = reservationWriter.create(
|
|
date = request.date,
|
|
timeId = request.timeId,
|
|
themeId = request.themeId,
|
|
status = ReservationStatus.CONFIRMED_PAYMENT_REQUIRED,
|
|
memberId = request.memberId,
|
|
requesterId = memberId
|
|
)
|
|
|
|
return created.toCreateResponse()
|
|
.also {
|
|
log.info { "[ReservationCommandService.createReservationByAdmin] 관리자 예약 추가 완료: reservationId=${it.id}" }
|
|
}
|
|
}
|
|
|
|
fun createWaiting(request: WaitingCreateRequest, memberId: Long): ReservationCreateResponse {
|
|
log.debug { "[ReservationCommandService.createWaiting] 시작: date=${request.date}, timeId=${request.timeId}, themeId=${request.themeId}, memberId=${memberId}" }
|
|
|
|
val created: ReservationEntity = reservationWriter.create(
|
|
date = request.date,
|
|
timeId = request.timeId,
|
|
themeId = request.themeId,
|
|
status = ReservationStatus.WAITING,
|
|
memberId = memberId,
|
|
requesterId = memberId
|
|
)
|
|
|
|
return created.toCreateResponse()
|
|
.also {
|
|
log.info { "[ReservationCommandService.createWaiting] 완료: reservationId=${it.id}" }
|
|
}
|
|
}
|
|
|
|
fun deleteReservation(reservationId: Long, memberId: Long) {
|
|
log.debug { "[ReservationCommandService.deleteReservation] 시작: reservationId=${reservationId}, memberId=$memberId" }
|
|
|
|
val reservation: ReservationEntity = reservationFinder.findById(reservationId)
|
|
|
|
reservationWriter.deleteConfirmed(reservation, requesterId = memberId)
|
|
.also { log.info { "[ReservationCommandService.deleteReservation] 완료: reservationId=${reservationId}" } }
|
|
}
|
|
|
|
fun confirmWaiting(reservationId: Long, memberId: Long) {
|
|
log.debug { "[ReservationCommandService.confirmWaiting] 시작: reservationId=$reservationId (by adminId=$memberId)" }
|
|
|
|
reservationWriter.confirm(reservationId)
|
|
.also { log.info { "[ReservationCommandService.confirmWaiting] 완료: reservationId=$reservationId" } }
|
|
}
|
|
|
|
fun deleteWaiting(reservationId: Long, memberId: Long) {
|
|
log.debug { "[ReservationCommandService.deleteWaiting] 시작: reservationId=$reservationId (by adminId=$memberId)" }
|
|
|
|
val reservation: ReservationEntity = reservationFinder.findById(reservationId)
|
|
|
|
reservationWriter.deleteWaiting(reservation, requesterId = memberId)
|
|
.also { log.info { "[ReservationCommandService.deleteWaiting] 완료: reservationId=$reservationId" } }
|
|
}
|
|
}
|