From 7aecc5c7066b6b260becd52505e1670de0e0e29c Mon Sep 17 00:00:00 2001 From: androidlover5842 Date: Thu, 29 Jan 2026 09:10:57 +0530 Subject: [PATCH] Link guest by phone on booking create --- .../controller/BookingFlow.kt | 36 +++++++++++++------ .../controller/dto/BookingDtos.kt | 1 + 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/BookingFlow.kt b/src/main/kotlin/com/android/trisolarisserver/controller/BookingFlow.kt index dbdf994..7955afc 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/BookingFlow.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/BookingFlow.kt @@ -77,8 +77,11 @@ class BookingFlow( val now = nowForProperty(property.timezone) val shouldCheckIn = !expectedCheckInAt.isBefore(now) + val phone = request.guestPhoneE164?.trim()?.takeIf { it.isNotBlank() } + val guest = resolveGuestForBooking(propertyId, property, actor, now, phone) val booking = com.android.trisolarisserver.models.booking.Booking( property = property, + primaryGuest = guest, status = if (shouldCheckIn) BookingStatus.CHECKED_IN else BookingStatus.OPEN, source = request.source?.trim().takeIf { !it.isNullOrBlank() } ?: "WALKIN", checkinAt = if (shouldCheckIn) expectedCheckInAt else null, @@ -99,19 +102,10 @@ class BookingFlow( ) val saved = bookingRepo.save(booking) - val guest = com.android.trisolarisserver.models.booking.Guest( - property = property, - createdBy = actor, - updatedAt = now - ) - val savedGuest = guestRepo.save(guest) - saved.primaryGuest = savedGuest - saved.updatedAt = now - bookingRepo.save(saved) return BookingCreateResponse( id = saved.id!!, status = saved.status.name, - guestId = savedGuest.id, + guestId = guest.id, checkInAt = saved.checkinAt?.toString(), expectedCheckInAt = saved.expectedCheckinAt?.toString(), expectedCheckOutAt = saved.expectedCheckoutAt?.toString() @@ -241,6 +235,28 @@ class BookingFlow( roomBoardEvents.emit(propertyId) } + private fun resolveGuestForBooking( + propertyId: UUID, + property: com.android.trisolarisserver.models.property.Property, + actor: com.android.trisolarisserver.models.property.AppUser?, + now: OffsetDateTime, + phone: String? + ): com.android.trisolarisserver.models.booking.Guest { + if (phone != null) { + val existing = guestRepo.findByPropertyIdAndPhoneE164(propertyId, phone) + if (existing != null) { + return existing + } + } + val guest = com.android.trisolarisserver.models.booking.Guest( + property = property, + phoneE164 = phone, + createdBy = actor, + updatedAt = now + ) + return guestRepo.save(guest) + } + @PostMapping("/{bookingId}/cancel") @ResponseStatus(HttpStatus.NO_CONTENT) @Transactional diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/dto/BookingDtos.kt b/src/main/kotlin/com/android/trisolarisserver/controller/dto/BookingDtos.kt index c06cdf1..50c0250 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/dto/BookingDtos.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/dto/BookingDtos.kt @@ -17,6 +17,7 @@ data class BookingCreateRequest( val source: String? = null, val expectedCheckInAt: String, val expectedCheckOutAt: String, + val guestPhoneE164: String? = null, val transportMode: String? = null, val adultCount: Int? = null, val totalGuestCount: Int? = null,