From 0a65e022e0e03826776493c719a1bd077e7ad64f Mon Sep 17 00:00:00 2001 From: androidlover5842 Date: Wed, 4 Feb 2026 16:32:31 +0530 Subject: [PATCH] Block check-in for bookings not scheduled for today --- docs/API_REFERENCE.txt | 2 +- .../trisolarisserver/controller/booking/BookingFlow.kt | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) 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) {