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 8fab310..8b917cd 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/booking/BookingFlow.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/booking/BookingFlow.kt @@ -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 diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/dto/booking/BookingDtos.kt b/src/main/kotlin/com/android/trisolarisserver/controller/dto/booking/BookingDtos.kt index 7366160..b26f8b2 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/dto/booking/BookingDtos.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/dto/booking/BookingDtos.kt @@ -2,17 +2,6 @@ package com.android.trisolarisserver.controller.dto.booking import java.util.UUID -data class BookingCheckInRequest( - val roomIds: List, - 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,