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); + } + + }