From 1ec6e62c04ab87889880d8fae134554b46c4b5a2 Mon Sep 17 00:00:00 2001 From: Patryk Date: Sun, 8 Jun 2025 19:54:15 +0200 Subject: [PATCH 1/3] fix payments and add new functions --- .../controller/OrderController.java | 84 +++++++++++++++++-- .../dto/OrderWithPaymentsDTO.java | 62 ++++++++++++++ .../artisanconnectbackend/dto/PaymentDTO.java | 34 ++++++++ .../repository/OrderRepository.java | 4 +- .../repository/PaymentRepository.java | 3 + .../service/OrderService.java | 5 ++ .../service/PaymentService.java | 8 ++ 7 files changed, 194 insertions(+), 6 deletions(-) create mode 100644 src/main/java/_11/asktpk/artisanconnectbackend/dto/OrderWithPaymentsDTO.java create mode 100644 src/main/java/_11/asktpk/artisanconnectbackend/dto/PaymentDTO.java diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/controller/OrderController.java b/src/main/java/_11/asktpk/artisanconnectbackend/controller/OrderController.java index f8e4dc2..8f81a08 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/controller/OrderController.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/controller/OrderController.java @@ -1,7 +1,9 @@ package _11.asktpk.artisanconnectbackend.controller; import _11.asktpk.artisanconnectbackend.dto.*; +import _11.asktpk.artisanconnectbackend.entities.Client; import _11.asktpk.artisanconnectbackend.entities.Order; +import _11.asktpk.artisanconnectbackend.entities.Payment; import _11.asktpk.artisanconnectbackend.service.OrderService; import _11.asktpk.artisanconnectbackend.service.PaymentService; import _11.asktpk.artisanconnectbackend.utils.Enums; @@ -11,6 +13,8 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RestController @RequestMapping("/api/v1/orders") @@ -38,21 +42,91 @@ public class OrderController { } @PostMapping("/token") - public ResponseEntity fetchToken() { - Order order = orderService.getOrderById(1L); + public ResponseEntity fetchToken(HttpServletRequest request,@RequestParam Long orderId) { + Order order = orderService.getOrderById(orderId); + Long clientId = tools.getClientIdFromRequest(request); + Client client = order.getClient(); OAuthPaymentResponseDTO authPaymentDTO = paymentService.getOAuthToken(); TransactionPaymentRequestDTO.Payer payer = new TransactionPaymentRequestDTO.Payer( - "patryk@test.pl", "Patryk Test"); + client.getEmail(), client.getFirstName()+' '+client.getLastName()); String paymentDescription = order.getOrderType() == Enums.OrderType.ACTIVATION ? "Aktywacja ogłoszenia" : "Podbicie ogłoszenia"; paymentDescription += order.getNotice().getTitle(); - TransactionPaymentRequestDTO request = new TransactionPaymentRequestDTO( + TransactionPaymentRequestDTO paymentRequest = new TransactionPaymentRequestDTO( order.getAmount(), paymentDescription, payer); - String response = paymentService.createTransaction(order, authPaymentDTO.getAccess_token(), request); + String response = paymentService.createTransaction(order, authPaymentDTO.getAccess_token(), paymentRequest); System.out.println(response); System.out.println(request); return ResponseEntity.status(HttpStatus.OK).body(response); } + + @GetMapping("/get/all") + public ResponseEntity> getOrders(HttpServletRequest request) { + Long clientId = tools.getClientIdFromRequest(request); + List orders = orderService.getOrdersByClientId(clientId); + + List dtoList = orders.stream().map(order -> { + OrderWithPaymentsDTO dto = new OrderWithPaymentsDTO(); + dto.setOrderId(order.getId()); + dto.setOrderType(order.getOrderType().name()); + dto.setStatus(order.getStatus().name()); + dto.setAmount(order.getAmount()); + dto.setCreatedAt(order.getCreatedAt()); + + List payments = paymentService.getPaymentsByOrderId(order.getId()); + + List paymentDTOs = payments.stream().map(payment -> { + PaymentDTO pDto = new PaymentDTO(); + pDto.setPaymentId(payment.getIdPayment()); + pDto.setAmount(payment.getAmount()); + pDto.setStatus(payment.getStatus().name()); + pDto.setTransactionPaymentUrl(payment.getTransactionPaymentUrl()); + pDto.setTransactionId(payment.getTransactionId()); + return pDto; + }).toList(); + + dto.setPayments(paymentDTOs); + return dto; + }).toList(); + + return ResponseEntity.ok(dtoList); + } + + @GetMapping("/get/{orderId}") + public ResponseEntity getOrderById(HttpServletRequest request, + @PathVariable Long orderId) { + Long clientId = tools.getClientIdFromRequest(request); + + Order order = orderService.getOrderById(orderId); + + if (!order.getClient().getId().equals(clientId)) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); // lub UNAUTHORIZED + } + + OrderWithPaymentsDTO dto = new OrderWithPaymentsDTO(); + dto.setOrderId(order.getId()); + dto.setOrderType(order.getOrderType().name()); + dto.setStatus(order.getStatus().name()); + dto.setAmount(order.getAmount()); + dto.setCreatedAt(order.getCreatedAt()); + + List payments = paymentService.getPaymentsByOrderId(order.getId()); + List paymentDTOs = payments.stream().map(payment -> { + PaymentDTO pDto = new PaymentDTO(); + pDto.setPaymentId(payment.getIdPayment()); + pDto.setAmount(payment.getAmount()); + pDto.setStatus(payment.getStatus().name()); + pDto.setTransactionPaymentUrl(payment.getTransactionPaymentUrl()); + pDto.setTransactionId(payment.getTransactionId()); + return pDto; + }).toList(); + + dto.setPayments(paymentDTOs); + + return ResponseEntity.ok(dto); + } + + } diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/dto/OrderWithPaymentsDTO.java b/src/main/java/_11/asktpk/artisanconnectbackend/dto/OrderWithPaymentsDTO.java new file mode 100644 index 0000000..5998910 --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/dto/OrderWithPaymentsDTO.java @@ -0,0 +1,62 @@ +package _11.asktpk.artisanconnectbackend.dto; + +import java.time.LocalDateTime; +import java.util.List; + +public class OrderWithPaymentsDTO { + private Long orderId; + private String orderType; + private String status; + private Double amount; + private LocalDateTime createdAt; + private List payments; + + // Gettery i settery + public Long getOrderId() { + return orderId; + } + + public void setOrderId(Long orderId) { + this.orderId = orderId; + } + + public String getOrderType() { + return orderType; + } + + public void setOrderType(String orderType) { + this.orderType = orderType; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Double getAmount() { + return amount; + } + + public void setAmount(Double amount) { + this.amount = amount; + } + + public LocalDateTime getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(LocalDateTime createdAt) { + this.createdAt = createdAt; + } + + public List getPayments() { + return payments; + } + + public void setPayments(List payments) { + this.payments = payments; + } +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/dto/PaymentDTO.java b/src/main/java/_11/asktpk/artisanconnectbackend/dto/PaymentDTO.java new file mode 100644 index 0000000..40b378e --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/dto/PaymentDTO.java @@ -0,0 +1,34 @@ +package _11.asktpk.artisanconnectbackend.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class PaymentDTO { + private Long paymentId; + private Double amount; + private String status; + private String transactionPaymentUrl; + private String transactionId; + + public void setPaymentId(Long paymentId) { + this.paymentId = paymentId; + } + + public void setAmount(Double amount) { + this.amount = amount; + } + + public void setStatus(String status) { + this.status = status; + } + + public void setTransactionPaymentUrl(String transactionPaymentUrl) { + this.transactionPaymentUrl = transactionPaymentUrl; + } + + public void setTransactionId(String transactionId) { + this.transactionId = transactionId; + } +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/repository/OrderRepository.java b/src/main/java/_11/asktpk/artisanconnectbackend/repository/OrderRepository.java index 422ab2d..6565b0a 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/repository/OrderRepository.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/repository/OrderRepository.java @@ -4,8 +4,10 @@ import _11.asktpk.artisanconnectbackend.entities.Order; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface OrderRepository extends JpaRepository { - + List findByClientId(Long clientId); } diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/repository/PaymentRepository.java b/src/main/java/_11/asktpk/artisanconnectbackend/repository/PaymentRepository.java index 486d80d..8aaedf9 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/repository/PaymentRepository.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/repository/PaymentRepository.java @@ -4,9 +4,12 @@ import _11.asktpk.artisanconnectbackend.entities.Payment; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.Optional; @Repository public interface PaymentRepository extends JpaRepository { Optional findByTransactionId(String transactionId); + + List findAllByOrderId(Long id); } diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/service/OrderService.java b/src/main/java/_11/asktpk/artisanconnectbackend/service/OrderService.java index 92a6ccf..c77e5fc 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/service/OrderService.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/service/OrderService.java @@ -13,6 +13,7 @@ import org.springframework.stereotype.Service; import _11.asktpk.artisanconnectbackend.entities.Order; import java.time.LocalDateTime; +import java.util.List; @Service public class OrderService { @@ -75,4 +76,8 @@ public class OrderService { return orderRepository.findById(id) .orElseThrow(() -> new RuntimeException("Nie znaleziono zamówienia o ID: " + id)); } + + public List getOrdersByClientId(Long clientId) { + return orderRepository.findByClientId(clientId); + } } diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/service/PaymentService.java b/src/main/java/_11/asktpk/artisanconnectbackend/service/PaymentService.java index aee6bd5..3811277 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/service/PaymentService.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/service/PaymentService.java @@ -15,6 +15,8 @@ import org.springframework.web.reactive.function.BodyInserters; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; +import java.util.List; + @Service public class PaymentService { private final WebClient webClient; @@ -80,4 +82,10 @@ public class PaymentService { return null; } + + public List getPaymentsByOrderId(Long id) { + return paymentRepository.findAllByOrderId(id); + } + + } From f56ffacec3d5d63c0332accd4e0cadfae162f2e4 Mon Sep 17 00:00:00 2001 From: Andrii Solianyk Date: Mon, 9 Jun 2025 20:39:57 +0200 Subject: [PATCH 2/3] filter --- .../_11/asktpk/artisanconnectbackend/config/SecurityConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/config/SecurityConfig.java b/src/main/java/_11/asktpk/artisanconnectbackend/config/SecurityConfig.java index bf88946..ca98ca2 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/config/SecurityConfig.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/config/SecurityConfig.java @@ -26,7 +26,7 @@ public class SecurityConfig { .cors(cors -> cors.configure(http)) .csrf(AbstractHttpConfigurer::disable) .authorizeHttpRequests(auth -> auth - .requestMatchers("/api/v1/auth/**").permitAll() + .requestMatchers("/api/v1/auth/**", "/api/v1/payments/notification").permitAll() .anyRequest().authenticated()) .sessionManagement(session -> session .sessionCreationPolicy(SessionCreationPolicy.STATELESS)); From 3204b921c4e26e091a1784fe090e73f916b158c2 Mon Sep 17 00:00:00 2001 From: Patryk Date: Mon, 9 Jun 2025 20:58:09 +0200 Subject: [PATCH 3/3] fix tapy --- .../controller/OrderController.java | 5 +---- .../controller/PaymentController.java | 9 --------- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/controller/OrderController.java b/src/main/java/_11/asktpk/artisanconnectbackend/controller/OrderController.java index 8f81a08..71cb942 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/controller/OrderController.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/controller/OrderController.java @@ -44,7 +44,6 @@ public class OrderController { @PostMapping("/token") public ResponseEntity fetchToken(HttpServletRequest request,@RequestParam Long orderId) { Order order = orderService.getOrderById(orderId); - Long clientId = tools.getClientIdFromRequest(request); Client client = order.getClient(); OAuthPaymentResponseDTO authPaymentDTO = paymentService.getOAuthToken(); TransactionPaymentRequestDTO.Payer payer = new TransactionPaymentRequestDTO.Payer( @@ -56,8 +55,6 @@ public class OrderController { order.getAmount(), paymentDescription, payer); String response = paymentService.createTransaction(order, authPaymentDTO.getAccess_token(), paymentRequest); - System.out.println(response); - System.out.println(request); return ResponseEntity.status(HttpStatus.OK).body(response); } @@ -102,7 +99,7 @@ public class OrderController { Order order = orderService.getOrderById(orderId); if (!order.getClient().getId().equals(clientId)) { - return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); // lub UNAUTHORIZED + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); } OrderWithPaymentsDTO dto = new OrderWithPaymentsDTO(); diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/controller/PaymentController.java b/src/main/java/_11/asktpk/artisanconnectbackend/controller/PaymentController.java index 8449e5c..7fc105d 100644 --- a/src/main/java/_11/asktpk/artisanconnectbackend/controller/PaymentController.java +++ b/src/main/java/_11/asktpk/artisanconnectbackend/controller/PaymentController.java @@ -39,9 +39,6 @@ public class PaymentController { @PostMapping(value = "/notification", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) public ResponseEntity handleTpayNotification(@RequestParam Map params) { - log.info("=== ODEBRANO NOTYFIKACJĘ Tpay ==="); - log.info("Parametry:\n{}", paramsToLogString(params)); - String id = params.get("id"); String trId = params.get("tr_id"); String trAmount = params.get("tr_amount"); @@ -54,7 +51,6 @@ public class PaymentController { ); if (!expectedMd5.equals(md5sum)) { - log.warn("❌ Błędna suma kontrolna! Otrzymano: {}, Oczekiwano: {}", md5sum, expectedMd5); return ResponseEntity.status(400).body("INVALID CHECKSUM"); } @@ -63,7 +59,6 @@ public class PaymentController { 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) { @@ -78,7 +73,6 @@ public class PaymentController { } } else if ("false".equalsIgnoreCase(trStatus)) { - log.warn("❌ Transakcja nieudana: {}", trId); payment.setStatus(Enums.PaymentStatus.INCORRECT); if (payment.getOrder() != null) { @@ -87,10 +81,7 @@ public class PaymentController { } paymentRepository.save(payment); - } else { - log.warn("⚠️ Brak płatności o tr_id={}", trId); } - return ResponseEntity.ok("TRUE"); }