Allow updating expected dates on bookings
All checks were successful
build-and-deploy / build-deploy (push) Successful in 36s

This commit is contained in:
androidlover5842
2026-01-29 20:29:04 +05:30
parent 5f5fd1f6b1
commit 790a74c40d
2 changed files with 51 additions and 0 deletions

View File

@@ -8,6 +8,7 @@ import com.android.trisolarisserver.controller.dto.BookingBulkCheckInRequest
import com.android.trisolarisserver.controller.dto.BookingCheckOutRequest
import com.android.trisolarisserver.controller.dto.BookingCreateRequest
import com.android.trisolarisserver.controller.dto.BookingCreateResponse
import com.android.trisolarisserver.controller.dto.BookingExpectedDatesUpdateRequest
import com.android.trisolarisserver.controller.dto.BookingLinkGuestRequest
import com.android.trisolarisserver.controller.dto.BookingNoShowRequest
import com.android.trisolarisserver.controller.dto.BookingListItem
@@ -373,6 +374,51 @@ class BookingFlow(
roomBoardEvents.emit(propertyId)
}
@PostMapping("/{bookingId}/expected-dates")
@ResponseStatus(HttpStatus.NO_CONTENT)
@Transactional
fun updateExpectedDates(
@PathVariable propertyId: UUID,
@PathVariable bookingId: UUID,
@AuthenticationPrincipal principal: MyPrincipal?,
@RequestBody request: BookingExpectedDatesUpdateRequest
) {
requireActor(propertyId, principal)
val booking = requireBooking(propertyId, bookingId)
when (booking.status) {
BookingStatus.OPEN -> {
if (request.expectedCheckInAt != null) {
booking.expectedCheckinAt = parseOffset(request.expectedCheckInAt)
}
if (request.expectedCheckOutAt != null) {
booking.expectedCheckoutAt = parseOffset(request.expectedCheckOutAt)
}
}
BookingStatus.CHECKED_IN -> {
if (request.expectedCheckInAt != null) {
throw ResponseStatusException(HttpStatus.CONFLICT, "Cannot change expected check-in after check-in")
}
if (request.expectedCheckOutAt != null) {
booking.expectedCheckoutAt = parseOffset(request.expectedCheckOutAt)
}
}
BookingStatus.CHECKED_OUT,
BookingStatus.CANCELLED,
BookingStatus.NO_SHOW -> {
throw ResponseStatusException(HttpStatus.CONFLICT, "Booking closed")
}
}
val expectedIn = booking.expectedCheckinAt
val expectedOut = booking.expectedCheckoutAt
if (expectedIn != null && expectedOut != null && !expectedOut.isAfter(expectedIn)) {
throw ResponseStatusException(HttpStatus.BAD_REQUEST, "Invalid date range")
}
booking.updatedAt = OffsetDateTime.now()
bookingRepo.save(booking)
}
@PostMapping("/{bookingId}/check-out")
@ResponseStatus(HttpStatus.NO_CONTENT)
@Transactional

View File

@@ -79,6 +79,11 @@ data class BookingLinkGuestRequest(
val guestId: UUID
)
data class BookingExpectedDatesUpdateRequest(
val expectedCheckInAt: String? = null,
val expectedCheckOutAt: String? = null
)
data class BookingCheckOutRequest(
val checkOutAt: String? = null,
val notes: String? = null