Remove single-payload booking check-in API
All checks were successful
build-and-deploy / build-deploy (push) Successful in 34s
All checks were successful
build-and-deploy / build-deploy (push) Successful in 34s
This commit is contained in:
@@ -9,7 +9,6 @@ import com.android.trisolarisserver.component.booking.BookingEvents
|
||||
import com.android.trisolarisserver.component.auth.PropertyAccess
|
||||
import com.android.trisolarisserver.component.room.RoomBoardEvents
|
||||
import com.android.trisolarisserver.controller.dto.booking.BookingCancelRequest
|
||||
import com.android.trisolarisserver.controller.dto.booking.BookingCheckInRequest
|
||||
import com.android.trisolarisserver.controller.dto.booking.BookingBulkCheckInRequest
|
||||
import com.android.trisolarisserver.controller.dto.booking.BookingCheckOutRequest
|
||||
import com.android.trisolarisserver.controller.dto.booking.BookingCreateRequest
|
||||
@@ -301,75 +300,6 @@ class BookingFlow(
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/{bookingId}/check-in")
|
||||
@ResponseStatus(HttpStatus.CREATED)
|
||||
@Transactional
|
||||
fun checkIn(
|
||||
@PathVariable propertyId: UUID,
|
||||
@PathVariable bookingId: UUID,
|
||||
@AuthenticationPrincipal principal: MyPrincipal?,
|
||||
@RequestBody request: BookingCheckInRequest
|
||||
) {
|
||||
val actor = requireActor(propertyId, principal)
|
||||
|
||||
val roomIds = request.roomIds.distinct()
|
||||
if (roomIds.isEmpty()) {
|
||||
throw ResponseStatusException(HttpStatus.BAD_REQUEST, "roomIds required")
|
||||
}
|
||||
val booking = requireBooking(propertyId, bookingId)
|
||||
if (booking.status != BookingStatus.OPEN) {
|
||||
throw ResponseStatusException(HttpStatus.CONFLICT, "Booking not open")
|
||||
}
|
||||
|
||||
val now = OffsetDateTime.now()
|
||||
val checkInAt = parseOffset(request.checkInAt) ?: now
|
||||
|
||||
val rooms = roomIds.map { roomId ->
|
||||
val room = roomRepo.findByIdAndPropertyId(roomId, propertyId)
|
||||
?: throw ResponseStatusException(HttpStatus.NOT_FOUND, "Room not found")
|
||||
if (!room.active || room.maintenance) {
|
||||
throw ResponseStatusException(HttpStatus.CONFLICT, "Room not available")
|
||||
}
|
||||
room
|
||||
}
|
||||
|
||||
val occupied = roomStayRepo.findActiveRoomIds(propertyId, rooms.mapNotNull { it.id })
|
||||
if (occupied.isNotEmpty()) {
|
||||
throw ResponseStatusException(HttpStatus.CONFLICT, "Room already occupied")
|
||||
}
|
||||
|
||||
rooms.forEach { room ->
|
||||
val stay = RoomStay(
|
||||
property = booking.property,
|
||||
booking = booking,
|
||||
room = room,
|
||||
fromAt = checkInAt,
|
||||
toAt = null,
|
||||
rateSource = parseRateSource(request.rateSource),
|
||||
nightlyRate = request.nightlyRate,
|
||||
ratePlanCode = request.ratePlanCode,
|
||||
currency = request.currency ?: booking.property.currency,
|
||||
createdBy = actor
|
||||
)
|
||||
roomStayRepo.save(stay)
|
||||
}
|
||||
|
||||
booking.status = BookingStatus.CHECKED_IN
|
||||
booking.checkinAt = checkInAt
|
||||
booking.transportMode = request.transportMode?.let {
|
||||
val mode = parseTransportMode(it)
|
||||
if (!isTransportModeAllowed(booking.property, mode)) {
|
||||
throw ResponseStatusException(HttpStatus.BAD_REQUEST, "Transport mode disabled")
|
||||
}
|
||||
mode
|
||||
}
|
||||
if (request.notes != null) booking.notes = request.notes
|
||||
booking.updatedAt = now
|
||||
bookingRepo.save(booking)
|
||||
roomBoardEvents.emit(propertyId)
|
||||
bookingEvents.emit(propertyId, bookingId)
|
||||
}
|
||||
|
||||
@PostMapping("/{bookingId}/check-in/bulk")
|
||||
@ResponseStatus(HttpStatus.CREATED)
|
||||
@Transactional
|
||||
|
||||
@@ -2,17 +2,6 @@ package com.android.trisolarisserver.controller.dto.booking
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
data class BookingCheckInRequest(
|
||||
val roomIds: List<UUID>,
|
||||
val checkInAt: String? = null,
|
||||
val transportMode: String? = null,
|
||||
val nightlyRate: Long? = null,
|
||||
val rateSource: String? = null,
|
||||
val ratePlanCode: String? = null,
|
||||
val currency: String? = null,
|
||||
val notes: String? = null
|
||||
)
|
||||
|
||||
data class BookingCheckInStayRequest(
|
||||
val roomId: UUID,
|
||||
val checkInAt: String? = null,
|
||||
|
||||
Reference in New Issue
Block a user