diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/RazorpayQrPayments.kt b/src/main/kotlin/com/android/trisolarisserver/controller/RazorpayQrPayments.kt index 92a48c6..a82df20 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/RazorpayQrPayments.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/RazorpayQrPayments.kt @@ -4,6 +4,7 @@ import com.android.trisolarisserver.component.PropertyAccess import com.android.trisolarisserver.controller.dto.RazorpayQrGenerateRequest import com.android.trisolarisserver.controller.dto.RazorpayQrEventResponse import com.android.trisolarisserver.controller.dto.RazorpayQrGenerateResponse +import com.android.trisolarisserver.controller.dto.RazorpayQrRecordResponse import com.android.trisolarisserver.models.booking.BookingStatus import com.android.trisolarisserver.models.payment.RazorpayQrRequest import com.android.trisolarisserver.models.property.Role @@ -225,6 +226,33 @@ class RazorpayQrPayments( return out } + @GetMapping("/qr") + fun listQr( + @PathVariable propertyId: UUID, + @PathVariable bookingId: UUID, + @AuthenticationPrincipal principal: MyPrincipal? + ): List { + requireRole(propertyAccess, propertyId, principal, Role.ADMIN, Role.MANAGER, Role.STAFF) + val booking = bookingRepo.findById(bookingId).orElseThrow { + ResponseStatusException(HttpStatus.NOT_FOUND, "Booking not found") + } + if (booking.property.id != propertyId) { + throw ResponseStatusException(HttpStatus.NOT_FOUND, "Booking not found for property") + } + return qrRequestRepo.findByBookingIdOrderByCreatedAtDesc(bookingId).map { qr -> + RazorpayQrRecordResponse( + qrId = qr.qrId, + amount = qr.amount, + currency = qr.currency, + status = qr.status, + imageUrl = qr.imageUrl, + expiryAt = qr.expiryAt?.toString(), + createdAt = qr.createdAt.toString(), + responsePayload = qr.responsePayload + ) + } + } + private fun postJson(url: String, settings: com.android.trisolarisserver.models.payment.RazorpaySettings, json: String): ResponseEntity { val headers = HttpHeaders() headers.contentType = MediaType.APPLICATION_JSON diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/dto/RazorpayDtos.kt b/src/main/kotlin/com/android/trisolarisserver/controller/dto/RazorpayDtos.kt index 16cabc7..22dd8ac 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/dto/RazorpayDtos.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/dto/RazorpayDtos.kt @@ -63,3 +63,14 @@ data class RazorpayQrEventResponse( val status: String?, val receivedAt: String ) + +data class RazorpayQrRecordResponse( + val qrId: String?, + val amount: Long, + val currency: String, + val status: String, + val imageUrl: String?, + val expiryAt: String?, + val createdAt: String, + val responsePayload: String? +) diff --git a/src/main/kotlin/com/android/trisolarisserver/repo/RazorpayQrRequestRepo.kt b/src/main/kotlin/com/android/trisolarisserver/repo/RazorpayQrRequestRepo.kt index cbb2cfc..376f174 100644 --- a/src/main/kotlin/com/android/trisolarisserver/repo/RazorpayQrRequestRepo.kt +++ b/src/main/kotlin/com/android/trisolarisserver/repo/RazorpayQrRequestRepo.kt @@ -18,4 +18,6 @@ interface RazorpayQrRequestRepo : JpaRepository { ): RazorpayQrRequest? fun findTopByQrIdOrderByCreatedAtDesc(qrId: String): RazorpayQrRequest? + + fun findByBookingIdOrderByCreatedAtDesc(bookingId: UUID): List }