diff --git a/docs/API_REFERENCE.txt b/docs/API_REFERENCE.txt index b8b8ab4..1e84033 100644 --- a/docs/API_REFERENCE.txt +++ b/docs/API_REFERENCE.txt @@ -1778,7 +1778,7 @@ BOOKING APIS - 401 Unauthorized - 403 Forbidden - 404 Not Found (booking/room) - - 409 Conflict (booking not open/room unavailable) + - 409 Conflict (booking not open/room unavailable/future booking can't be checked in) - Expected checkout API is this one: diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/booking/BookingFlow.kt b/src/main/kotlin/com/android/trisolarisserver/controller/booking/BookingFlow.kt index 7469956..f12ac3c 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/booking/BookingFlow.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/booking/BookingFlow.kt @@ -473,6 +473,12 @@ class BookingFlow( if (booking.status != BookingStatus.OPEN) { throw ResponseStatusException(HttpStatus.CONFLICT, "Booking not open") } + val propertyZone = resolveZoneId(booking.property.timezone) + val today = OffsetDateTime.now(propertyZone).toLocalDate() + val expectedCheckInDate = booking.expectedCheckinAt?.atZoneSameInstant(propertyZone)?.toLocalDate() + if (expectedCheckInDate != null && expectedCheckInDate != today) { + throw ResponseStatusException(HttpStatus.CONFLICT, "Future booking can't be checked in") + } val roomIds = request.stays.map { it.roomId } if (roomIds.distinct().size != roomIds.size) {