From aa0516776f34a11ea8431f8adb36c1d8811d0610 Mon Sep 17 00:00:00 2001 From: GustavH Date: Tue, 21 Jan 2025 17:20:31 +0100 Subject: [PATCH] refactoring capturing method, now it takes order id instead of payment id --- .../commercify/controller/PaymentController.java | 6 +++--- .../integration/mobilepay/MobilePayService.java | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/zenfulcode/commercify/commercify/controller/PaymentController.java b/src/main/java/com/zenfulcode/commercify/commercify/controller/PaymentController.java index 5484f64..c9358e6 100644 --- a/src/main/java/com/zenfulcode/commercify/commercify/controller/PaymentController.java +++ b/src/main/java/com/zenfulcode/commercify/commercify/controller/PaymentController.java @@ -38,10 +38,10 @@ public ResponseEntity getPaymentStatus(@PathVariable Long orderId } @PreAuthorize("hasRole('ADMIN')") - @PostMapping("/{paymentId}/capture") - public ResponseEntity capturePayment(@PathVariable Long paymentId, @RequestBody CapturePaymentRequest request) { + @PostMapping("/{orderId}/capture") + public ResponseEntity capturePayment(@PathVariable Long orderId, @RequestBody CapturePaymentRequest request) { try { - mobilePayService.capturePayment(paymentId, request.captureAmount(), request.isPartialCapture()); + mobilePayService.capturePayment(orderId, request.captureAmount(), request.isPartialCapture()); return ResponseEntity.ok("Payment captured successfully"); } catch (Exception e) { log.error("Error capturing payment", e); diff --git a/src/main/java/com/zenfulcode/commercify/commercify/integration/mobilepay/MobilePayService.java b/src/main/java/com/zenfulcode/commercify/commercify/integration/mobilepay/MobilePayService.java index 4e46fa1..6b90270 100644 --- a/src/main/java/com/zenfulcode/commercify/commercify/integration/mobilepay/MobilePayService.java +++ b/src/main/java/com/zenfulcode/commercify/commercify/integration/mobilepay/MobilePayService.java @@ -4,7 +4,6 @@ import com.zenfulcode.commercify.commercify.PaymentStatus; import com.zenfulcode.commercify.commercify.api.requests.PaymentRequest; import com.zenfulcode.commercify.commercify.api.requests.WebhookPayload; -import com.zenfulcode.commercify.commercify.api.requests.products.PriceRequest; import com.zenfulcode.commercify.commercify.api.responses.PaymentResponse; import com.zenfulcode.commercify.commercify.dto.OrderDTO; import com.zenfulcode.commercify.commercify.dto.OrderDetailsDTO; @@ -78,9 +77,9 @@ public MobilePayService(PaymentRepository paymentRepository, EmailService emailS } @Override - public void capturePayment(Long paymentId, double captureAmount, boolean isPartialCapture) { - PaymentEntity payment = paymentRepository.findById(paymentId) - .orElseThrow(() -> new RuntimeException("Payment not found: " + paymentId)); + public void capturePayment(Long orderId, double captureAmount, boolean isPartialCapture) { + PaymentEntity payment = paymentRepository.findByOrderId(orderId) + .orElseThrow(() -> new RuntimeException("Payment not found for orderId: " + orderId)); if (payment.getStatus() != PaymentStatus.PAID) { throw new RuntimeException("Payment cannot captured"); @@ -89,12 +88,13 @@ public void capturePayment(Long paymentId, double captureAmount, boolean isParti OrderDetailsDTO order = orderService.getOrderById(payment.getOrderId()); double capturingAmount = isPartialCapture ? captureAmount : payment.getTotalAmount(); + capturingAmount *= 100; // Convert to minor units - PriceRequest priceRequest = new PriceRequest(order.getOrder().getCurrency(), capturingAmount); + log.info("Capturing payment: orderId={}, amount={} formatted={}", orderId, capturingAmount, Math.round(capturingAmount)); // Capture payment if (payment.getMobilePayReference() != null) { - capturePayment(payment.getMobilePayReference(), priceRequest); + capturePayment(payment.getMobilePayReference(), Math.round(capturingAmount), order.getOrder().getCurrency()); } // Update payment status @@ -409,14 +409,14 @@ protected CompletableFuture getWebhookSecret() { } } - public void capturePayment(String mobilePayReference, PriceRequest captureAmount) { + public void capturePayment(String mobilePayReference, long captureAmount, String currency) { paymentRepository.findByMobilePayReference(mobilePayReference) .orElseThrow(() -> new PaymentProcessingException("Payment not found", null)); HttpHeaders headers = mobilePayRequestHeaders(); Map request = new HashMap<>(); - request.put("modificationAmount", new MobilePayPrice(Math.round(captureAmount.amount() * 100), captureAmount.currency())); + request.put("modificationAmount", new MobilePayPrice(captureAmount, currency)); HttpEntity> entity = new HttpEntity<>(request, headers);