From 4e89336652183fe969732a6aa4eac88482a3a1c2 Mon Sep 17 00:00:00 2001 From: androidlover5842 Date: Sun, 1 Feb 2026 14:08:45 +0530 Subject: [PATCH] Add unified Razorpay payment requests list --- .../RazorpayPaymentRequestsController.kt | 71 +++++++++++++++++++ .../controller/dto/RazorpayDtos.kt | 14 ++++ .../repo/RazorpayPaymentLinkRequestRepo.kt | 2 + 3 files changed, 87 insertions(+) create mode 100644 src/main/kotlin/com/android/trisolarisserver/controller/RazorpayPaymentRequestsController.kt diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/RazorpayPaymentRequestsController.kt b/src/main/kotlin/com/android/trisolarisserver/controller/RazorpayPaymentRequestsController.kt new file mode 100644 index 0000000..02d4cf0 --- /dev/null +++ b/src/main/kotlin/com/android/trisolarisserver/controller/RazorpayPaymentRequestsController.kt @@ -0,0 +1,71 @@ +package com.android.trisolarisserver.controller + +import com.android.trisolarisserver.component.PropertyAccess +import com.android.trisolarisserver.controller.dto.RazorpayPaymentRequestResponse +import com.android.trisolarisserver.db.repo.BookingRepo +import com.android.trisolarisserver.models.property.Role +import com.android.trisolarisserver.repo.RazorpayPaymentLinkRequestRepo +import com.android.trisolarisserver.repo.RazorpayQrRequestRepo +import com.android.trisolarisserver.security.MyPrincipal +import org.springframework.http.HttpStatus +import org.springframework.security.core.annotation.AuthenticationPrincipal +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PathVariable +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController +import org.springframework.web.server.ResponseStatusException +import java.util.UUID + +@RestController +@RequestMapping("/properties/{propertyId}/bookings/{bookingId}/payments/razorpay") +class RazorpayPaymentRequestsController( + private val propertyAccess: PropertyAccess, + private val bookingRepo: BookingRepo, + private val qrRequestRepo: RazorpayQrRequestRepo, + private val paymentLinkRequestRepo: RazorpayPaymentLinkRequestRepo +) { + + @GetMapping("/requests") + fun listRequests( + @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") + } + + val qrItems = qrRequestRepo.findByBookingIdOrderByCreatedAtDesc(bookingId).map { qr -> + RazorpayPaymentRequestResponse( + type = "QR", + requestId = qr.id!!, + amount = qr.amount, + currency = qr.currency, + status = qr.status, + createdAt = qr.createdAt.toString(), + qrId = qr.qrId, + imageUrl = qr.imageUrl, + expiryAt = qr.expiryAt?.toString() + ) + } + + val linkItems = paymentLinkRequestRepo.findByBookingIdOrderByCreatedAtDesc(bookingId).map { link -> + RazorpayPaymentRequestResponse( + type = "PAYMENT_LINK", + requestId = link.id!!, + amount = link.amount, + currency = link.currency, + status = link.status, + createdAt = link.createdAt.toString(), + paymentLinkId = link.paymentLinkId, + paymentLink = link.shortUrl + ) + } + + return (qrItems + linkItems).sortedByDescending { it.createdAt } + } +} 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 22dd8ac..d553821 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/dto/RazorpayDtos.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/dto/RazorpayDtos.kt @@ -74,3 +74,17 @@ data class RazorpayQrRecordResponse( val createdAt: String, val responsePayload: String? ) + +data class RazorpayPaymentRequestResponse( + val type: String, + val requestId: UUID, + val amount: Long, + val currency: String, + val status: String, + val createdAt: String, + val qrId: String? = null, + val imageUrl: String? = null, + val expiryAt: String? = null, + val paymentLinkId: String? = null, + val paymentLink: String? = null +) diff --git a/src/main/kotlin/com/android/trisolarisserver/repo/RazorpayPaymentLinkRequestRepo.kt b/src/main/kotlin/com/android/trisolarisserver/repo/RazorpayPaymentLinkRequestRepo.kt index 3c6fc9c..4f8facf 100644 --- a/src/main/kotlin/com/android/trisolarisserver/repo/RazorpayPaymentLinkRequestRepo.kt +++ b/src/main/kotlin/com/android/trisolarisserver/repo/RazorpayPaymentLinkRequestRepo.kt @@ -11,4 +11,6 @@ interface RazorpayPaymentLinkRequestRepo : JpaRepository }