From 12cb37127ba0a2f10dffe1735ac81049efe607ae Mon Sep 17 00:00:00 2001 From: Patryk Date: Mon, 26 May 2025 21:51:24 +0200 Subject: [PATCH] ad: handling of payment notifications --- .../controller/PaymentController.java | 48 +++++++++++++++++-- .../repository/PaymentRepository.java | 4 +- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/controller/PaymentController.java b/src/main/java/_11/asktpk/artisanconnectbackend/controller/PaymentController.java index 7706e5f..8449e5c 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/controller/PaymentController.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/controller/PaymentController.java @@ -1,5 +1,10 @@ package _11.asktpk.artisanconnectbackend.controller; +import _11.asktpk.artisanconnectbackend.entities.Notice; +import _11.asktpk.artisanconnectbackend.entities.Order; +import _11.asktpk.artisanconnectbackend.entities.Payment; +import _11.asktpk.artisanconnectbackend.repository.PaymentRepository; +import _11.asktpk.artisanconnectbackend.utils.Enums; import org.springframework.beans.factory.annotation.Value; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -12,7 +17,9 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.time.LocalDateTime; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; @RestController @@ -24,6 +31,12 @@ public class PaymentController { private static final Logger log = LoggerFactory.getLogger(PaymentController.class); + private final PaymentRepository paymentRepository; + + public PaymentController(PaymentRepository paymentRepository) { + this.paymentRepository = paymentRepository; + } + @PostMapping(value = "/notification", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) public ResponseEntity handleTpayNotification(@RequestParam Map params) { log.info("=== ODEBRANO NOTYFIKACJĘ Tpay ==="); @@ -45,10 +58,37 @@ public class PaymentController { return ResponseEntity.status(400).body("INVALID CHECKSUM"); } - if ("true".equals(trStatus)) { - log.info("✅ Transakcja opłacona: tr_id={}, kwota={}", trId, params.get("tr_paid")); - } else if ("chargeback".equals(trStatus)) { - log.warn("⚠️ Chargeback: {}", trId); + Optional optionalPayment = paymentRepository.findByTransactionId(trId); + if (optionalPayment.isPresent()) { + Payment payment = optionalPayment.get(); + + if ("true".equalsIgnoreCase(trStatus) || "PAID".equalsIgnoreCase(trStatus)) { + log.info("✅ Transakcja opłacona: tr_id={}, kwota={}", trId, params.get("tr_paid")); + payment.setStatus(Enums.PaymentStatus.CORRECT); + + if (payment.getOrder() != null) { + Order order = payment.getOrder(); + order.setStatus(Enums.OrderStatus.COMPLETED); + Notice notice = order.getNotice(); + if (order.getOrderType() == Enums.OrderType.ACTIVATION) { + notice.setStatus(Enums.Status.ACTIVE); + } else if (order.getOrderType() == Enums.OrderType.BOOST) { + notice.setPublishDate(LocalDateTime.now()); + } + } + + } else if ("false".equalsIgnoreCase(trStatus)) { + log.warn("❌ Transakcja nieudana: {}", trId); + payment.setStatus(Enums.PaymentStatus.INCORRECT); + + if (payment.getOrder() != null) { + payment.getOrder().setStatus(Enums.OrderStatus.CANCELLED); + } + } + + paymentRepository.save(payment); + } else { + log.warn("⚠️ Brak płatności o tr_id={}", trId); } return ResponseEntity.ok("TRUE"); diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/repository/PaymentRepository.java b/src/main/java/_11/asktpk/artisanconnectbackend/repository/PaymentRepository.java index 922dc58..486d80d 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/repository/PaymentRepository.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/repository/PaymentRepository.java @@ -4,7 +4,9 @@ import _11.asktpk.artisanconnectbackend.entities.Payment; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.Optional; + @Repository public interface PaymentRepository extends JpaRepository { - + Optional findByTransactionId(String transactionId); }