Allow guest document delete when reused guest has active booking
All checks were successful
build-and-deploy / build-deploy (push) Successful in 36s

This commit is contained in:
androidlover5842
2026-02-08 18:56:13 +05:30
parent dc55df42bc
commit 83c7b45e89
3 changed files with 16 additions and 3 deletions

View File

@@ -2539,6 +2539,7 @@ GUEST + DOCUMENT + RATING APIS
- Deletes document row + file.
- Allowed only when booking is OPEN or CHECKED_IN.
- Reused guest flow: if the document's linked booking is closed but the same guest has another OPEN/CHECKED_IN booking in that property, delete is allowed.
Request body:

View File

@@ -14,6 +14,7 @@ import com.android.trisolarisserver.component.auth.PropertyAccess
import com.android.trisolarisserver.repo.booking.BookingRepo
import com.android.trisolarisserver.repo.guest.GuestDocumentRepo
import com.android.trisolarisserver.repo.guest.GuestRepo
import com.android.trisolarisserver.models.booking.BookingStatus
import com.android.trisolarisserver.models.booking.GuestDocument
import com.android.trisolarisserver.models.property.Role
import com.android.trisolarisserver.repo.property.AppUserRepo
@@ -192,9 +193,13 @@ class GuestDocuments(
val document = guestDocumentRepo.findByIdAndPropertyIdAndGuestId(documentId, propertyId, guestId)
?: throw ResponseStatusException(HttpStatus.NOT_FOUND, "Document not found")
val status = document.booking.status
if (status != com.android.trisolarisserver.models.booking.BookingStatus.OPEN &&
status != com.android.trisolarisserver.models.booking.BookingStatus.CHECKED_IN
) {
val linkedBookingOpenOrCheckedIn = status == BookingStatus.OPEN || status == BookingStatus.CHECKED_IN
val guestHasOpenOrCheckedInBooking = bookingRepo.existsByPropertyIdAndPrimaryGuestIdAndStatusIn(
propertyId = propertyId,
primaryGuestId = guestId,
status = listOf(BookingStatus.OPEN, BookingStatus.CHECKED_IN)
)
if (!linkedBookingOpenOrCheckedIn && !guestHasOpenOrCheckedInBooking) {
throw ResponseStatusException(
HttpStatus.BAD_REQUEST,
"Documents can only be deleted for OPEN or CHECKED_IN bookings"

View File

@@ -1,6 +1,7 @@
package com.android.trisolarisserver.repo.booking
import com.android.trisolarisserver.models.booking.Booking
import com.android.trisolarisserver.models.booking.BookingStatus
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.data.jpa.repository.EntityGraph
import java.util.UUID
@@ -16,4 +17,10 @@ interface BookingRepo : JpaRepository<Booking, UUID> {
@EntityGraph(attributePaths = ["property", "primaryGuest", "createdBy"])
fun findDetailedById(id: UUID): java.util.Optional<Booking>
fun existsByPropertyIdAndPrimaryGuestIdAndStatusIn(
propertyId: UUID,
primaryGuestId: UUID,
status: Collection<BookingStatus>
): Boolean
}