From 4c0264cdbea4266f8738ac4c3d5c4e09f94fc095 Mon Sep 17 00:00:00 2001 From: androidlover5842 Date: Thu, 29 Jan 2026 13:55:17 +0530 Subject: [PATCH] Add booking travel cities and member relation --- .../config/BookingSchemaFix.kt | 42 +++++++++++++++++++ .../controller/BookingFlow.kt | 16 +++++++ .../controller/dto/BookingDtos.kt | 3 ++ .../models/booking/Booking.kt | 10 +++++ .../models/booking/MemberRelation.kt | 8 ++++ 5 files changed, 79 insertions(+) create mode 100644 src/main/kotlin/com/android/trisolarisserver/models/booking/MemberRelation.kt diff --git a/src/main/kotlin/com/android/trisolarisserver/config/BookingSchemaFix.kt b/src/main/kotlin/com/android/trisolarisserver/config/BookingSchemaFix.kt index 593dd4e..b9e7ef7 100644 --- a/src/main/kotlin/com/android/trisolarisserver/config/BookingSchemaFix.kt +++ b/src/main/kotlin/com/android/trisolarisserver/config/BookingSchemaFix.kt @@ -23,5 +23,47 @@ class BookingSchemaFix( logger.info("Adding booking.expected_guest_count column") jdbcTemplate.execute("alter table booking add column expected_guest_count integer") } + + val hasFromCity = jdbcTemplate.queryForObject( + """ + select count(*) + from information_schema.columns + where table_name = 'booking' + and column_name = 'from_city' + """.trimIndent(), + Int::class.java + ) ?: 0 + if (hasFromCity == 0) { + logger.info("Adding booking.from_city column") + jdbcTemplate.execute("alter table booking add column from_city varchar") + } + + val hasToCity = jdbcTemplate.queryForObject( + """ + select count(*) + from information_schema.columns + where table_name = 'booking' + and column_name = 'to_city' + """.trimIndent(), + Int::class.java + ) ?: 0 + if (hasToCity == 0) { + logger.info("Adding booking.to_city column") + jdbcTemplate.execute("alter table booking add column to_city varchar") + } + + val hasMemberRelation = jdbcTemplate.queryForObject( + """ + select count(*) + from information_schema.columns + where table_name = 'booking' + and column_name = 'member_relation' + """.trimIndent(), + Int::class.java + ) ?: 0 + if (hasMemberRelation == 0) { + logger.info("Adding booking.member_relation column") + jdbcTemplate.execute("alter table booking add column member_relation varchar") + } } } diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/BookingFlow.kt b/src/main/kotlin/com/android/trisolarisserver/controller/BookingFlow.kt index aed13de..21f24e5 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/BookingFlow.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/BookingFlow.kt @@ -17,6 +17,7 @@ import com.android.trisolarisserver.db.repo.GuestDocumentRepo import com.android.trisolarisserver.db.repo.GuestRepo import com.android.trisolarisserver.db.repo.GuestRatingRepo import com.android.trisolarisserver.models.booking.BookingStatus +import com.android.trisolarisserver.models.booking.MemberRelation import com.android.trisolarisserver.models.booking.TransportMode import com.android.trisolarisserver.models.room.RoomStay import com.android.trisolarisserver.models.room.RateSource @@ -82,6 +83,9 @@ class BookingFlow( val now = nowForProperty(property.timezone) val phone = request.guestPhoneE164?.trim()?.takeIf { it.isNotBlank() } val guest = resolveGuestForBooking(propertyId, property, actor, now, phone) + val fromCity = request.fromCity?.trim()?.ifBlank { null } + val toCity = request.toCity?.trim()?.ifBlank { null } + val memberRelation = parseMemberRelation(request.memberRelation) val hasGuestCounts = request.maleCount != null || request.femaleCount != null || request.childCount != null val adultCount = if (hasGuestCounts) { (request.maleCount ?: 0) + (request.femaleCount ?: 0) @@ -114,6 +118,9 @@ class BookingFlow( femaleCount = request.femaleCount, totalGuestCount = totalGuestCount, expectedGuestCount = request.expectedGuestCount, + fromCity = fromCity, + toCity = toCity, + memberRelation = memberRelation, notes = request.notes, createdBy = actor, updatedAt = now @@ -536,6 +543,15 @@ class BookingFlow( } } + private fun parseMemberRelation(value: String?): MemberRelation? { + if (value.isNullOrBlank()) return null + return try { + MemberRelation.valueOf(value.trim().uppercase()) + } catch (_: IllegalArgumentException) { + throw ResponseStatusException(HttpStatus.BAD_REQUEST, "Unknown member relation") + } + } + private fun parseRateSource(value: String?): RateSource? { if (value.isNullOrBlank()) return null return try { 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 499ff26..41e269f 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/dto/BookingDtos.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/dto/BookingDtos.kt @@ -34,6 +34,9 @@ data class BookingCreateRequest( val expectedCheckInAt: String, val expectedCheckOutAt: String, val guestPhoneE164: String? = null, + val fromCity: String? = null, + val toCity: String? = null, + val memberRelation: String? = null, val transportMode: String? = null, val childCount: Int? = null, val maleCount: Int? = null, diff --git a/src/main/kotlin/com/android/trisolarisserver/models/booking/Booking.kt b/src/main/kotlin/com/android/trisolarisserver/models/booking/Booking.kt index fb12c63..bd7584a 100644 --- a/src/main/kotlin/com/android/trisolarisserver/models/booking/Booking.kt +++ b/src/main/kotlin/com/android/trisolarisserver/models/booking/Booking.kt @@ -74,6 +74,16 @@ class Booking( @Column(name = "expected_guest_count") var expectedGuestCount: Int? = null, + @Column(name = "from_city") + var fromCity: String? = null, + + @Column(name = "to_city") + var toCity: String? = null, + + @Enumerated(EnumType.STRING) + @Column(name = "member_relation") + var memberRelation: MemberRelation? = null, + var notes: String? = null, @ManyToOne(fetch = FetchType.LAZY) diff --git a/src/main/kotlin/com/android/trisolarisserver/models/booking/MemberRelation.kt b/src/main/kotlin/com/android/trisolarisserver/models/booking/MemberRelation.kt new file mode 100644 index 0000000..b425ecf --- /dev/null +++ b/src/main/kotlin/com/android/trisolarisserver/models/booking/MemberRelation.kt @@ -0,0 +1,8 @@ +package com.android.trisolarisserver.models.booking + +enum class MemberRelation { + FRIENDS, + FAMILY, + GROUP, + ALONE +}