From 8134c61792d4395fb6e5996b3fd40052f0ff399e Mon Sep 17 00:00:00 2001 From: Bastian Kuberek Date: Mon, 5 Aug 2024 09:53:44 -0400 Subject: [PATCH] Fix bug in Restaurant Table Delegator. Was not using table index --- .../graphql/v1/ReservationTableDelegator.kt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/kotlin/com/bkuberek/bookings/graphql/v1/ReservationTableDelegator.kt b/src/main/kotlin/com/bkuberek/bookings/graphql/v1/ReservationTableDelegator.kt index 33a4271..e7dfe68 100644 --- a/src/main/kotlin/com/bkuberek/bookings/graphql/v1/ReservationTableDelegator.kt +++ b/src/main/kotlin/com/bkuberek/bookings/graphql/v1/ReservationTableDelegator.kt @@ -49,6 +49,7 @@ class ReservationTableDelegator { // Keep track of the last table. // Assuming our query is right, the last item should be the largest table. + var lastSeen: RestaurantTableEntity? = null for (table in availableTables) { // Skip if the table supply is depleted if (table.quantity == 0) { @@ -76,6 +77,7 @@ class ReservationTableDelegator { // We found our table, no need to look any further break } + lastSeen = table } // We've seen the whole list, and we didn't find a table. @@ -87,6 +89,21 @@ class ReservationTableDelegator { ) throw IllegalArgumentException("Not enough seats") } + + // If we do have enough capacity but the tables are not large enough, we split the group + if (standing > 0 && lastSeen != null && lastSeen.quantity > 0) { + // seat part of the group at the last largest table + val reservedTable = reservedTables[lastSeen.size] + if (reservedTable == null) { + val newTable = reservationTableEntity(randomUUID, lastSeen) + reservedTables[lastSeen.size] = newTable + reservation.tables.add(newTable) + } else { + reservedTable.quantity += 1 + } + standing -= lastSeen.size + lastSeen.quantity -= 1 + } } // This should not have happened since we throw an exception above, but just in case,