From e62a11d2b06374923f7d6e4b8fb237c096e6f7b4 Mon Sep 17 00:00:00 2001 From: byunyourim Date: Thu, 12 Sep 2024 22:58:12 +0900 Subject: [PATCH] =?UTF-8?q?refact:OrderFacade=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/payment/PaymentClient.java | 4 +- .../controller/payment/PaymentController.java | 7 --- .../controller/ticket/TicketController.java | 7 +-- ...elInput.java => PaymentCancelRequest.java} | 2 +- .../com/kboticket/service/OrderFacade.java | 57 ------------------- .../service/payment/PaymentService.java | 7 +-- .../service/ticket/TicketService.java | 43 ++++++++++++++ 7 files changed, 52 insertions(+), 75 deletions(-) rename src/main/java/com/kboticket/dto/payment/{PaymentCancelInput.java => PaymentCancelRequest.java} (87%) delete mode 100644 src/main/java/com/kboticket/service/OrderFacade.java diff --git a/src/main/java/com/kboticket/config/payment/PaymentClient.java b/src/main/java/com/kboticket/config/payment/PaymentClient.java index a7c602e..d18ecb2 100644 --- a/src/main/java/com/kboticket/config/payment/PaymentClient.java +++ b/src/main/java/com/kboticket/config/payment/PaymentClient.java @@ -3,7 +3,7 @@ import com.kboticket.common.constants.KboConstant; import com.kboticket.config.PaymentConfig; import com.kboticket.dto.payment.PaymentRequestInput; -import com.kboticket.dto.payment.PaymentCancelInput; +import com.kboticket.dto.payment.PaymentCancelRequest; import com.kboticket.dto.payment.PaymentCancelResponse; import com.kboticket.dto.payment.PaymentSuccessResponse; import com.kboticket.enums.ErrorCode; @@ -70,7 +70,7 @@ public PaymentSuccessResponse requestPayment(PaymentRequestInput paymentRequestI } - public PaymentCancelResponse cancelPayment(PaymentCancelInput input) { + public PaymentCancelResponse cancelPayment(PaymentCancelRequest input) { String paymentKey = input.getPaymentKey(); return restClient.method(HttpMethod.POST) diff --git a/src/main/java/com/kboticket/controller/payment/PaymentController.java b/src/main/java/com/kboticket/controller/payment/PaymentController.java index 72969a0..1206dcf 100644 --- a/src/main/java/com/kboticket/controller/payment/PaymentController.java +++ b/src/main/java/com/kboticket/controller/payment/PaymentController.java @@ -1,13 +1,9 @@ package com.kboticket.controller.payment; import com.kboticket.common.CommonResponse; -import com.kboticket.domain.Game; -import com.kboticket.domain.Seat; -import com.kboticket.domain.User; import com.kboticket.dto.payment.PaymentFailResponse; import com.kboticket.dto.payment.PaymentRequestDto; import com.kboticket.dto.payment.PaymentSuccessResponse; -import com.kboticket.service.OrderFacade; import com.kboticket.service.payment.PaymentService; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -16,9 +12,6 @@ import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.*; -import java.util.List; -import java.util.Set; - @Slf4j @RestController @RequestMapping("/payment") diff --git a/src/main/java/com/kboticket/controller/ticket/TicketController.java b/src/main/java/com/kboticket/controller/ticket/TicketController.java index 28d74a5..cc8d7e3 100644 --- a/src/main/java/com/kboticket/controller/ticket/TicketController.java +++ b/src/main/java/com/kboticket/controller/ticket/TicketController.java @@ -3,7 +3,7 @@ import com.kboticket.common.CommonResponse; import com.kboticket.controller.ticket.dto.TicketResponse; import com.kboticket.dto.TicketDto; -import com.kboticket.dto.payment.PaymentCancelInput; +import com.kboticket.dto.payment.PaymentCancelRequest; import com.kboticket.dto.payment.PaymentCancelResponse; import com.kboticket.service.ticket.TicketService; import lombok.RequiredArgsConstructor; @@ -32,10 +32,9 @@ public CommonResponse view(@PathVariable Long tickketId) { * 티켓 취소 */ @PostMapping("/cancel") - public CommonResponse cancelTicket(@RequestBody PaymentCancelInput paymentCancelInput) { - // PaymentCancelResponse response = orderFacade.cancelTickets(paymentCancelInput); + public CommonResponse cancelTicket(@RequestBody PaymentCancelRequest paymentCancelRequest) { + PaymentCancelResponse response = ticketService.cancel(paymentCancelRequest); - PaymentCancelResponse response = null; return new CommonResponse<>(response); } } diff --git a/src/main/java/com/kboticket/dto/payment/PaymentCancelInput.java b/src/main/java/com/kboticket/dto/payment/PaymentCancelRequest.java similarity index 87% rename from src/main/java/com/kboticket/dto/payment/PaymentCancelInput.java rename to src/main/java/com/kboticket/dto/payment/PaymentCancelRequest.java index a92672d..762d945 100644 --- a/src/main/java/com/kboticket/dto/payment/PaymentCancelInput.java +++ b/src/main/java/com/kboticket/dto/payment/PaymentCancelRequest.java @@ -5,7 +5,7 @@ @Builder @Getter @Setter @AllArgsConstructor -public class PaymentCancelInput { +public class PaymentCancelRequest { private String paymentKey; private String cancelReason; private int cancelAmount; diff --git a/src/main/java/com/kboticket/service/OrderFacade.java b/src/main/java/com/kboticket/service/OrderFacade.java deleted file mode 100644 index 90dafc1..0000000 --- a/src/main/java/com/kboticket/service/OrderFacade.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.kboticket.service; - -import com.kboticket.domain.Order; -import com.kboticket.domain.Payment; -import com.kboticket.dto.TicketDto; -import com.kboticket.dto.payment.PaymentCancelInput; -import com.kboticket.dto.payment.PaymentCancelResponse; -import com.kboticket.service.order.OrderService; -import com.kboticket.service.payment.PaymentService; -import com.kboticket.service.ticket.TicketService; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -import java.util.Arrays; -import java.util.Set; -import java.util.stream.Collectors; - -@Component -@RequiredArgsConstructor -public class OrderFacade { - - private final OrderService orderService; - private final TicketService ticketService; - private final PaymentService paymentService; - - - // 결제 취소 - // 가장 오류가 많이 나는 것을 먼저 처리하고 - public PaymentCancelResponse cancelTickets(PaymentCancelInput paymentCancelInput) { - String orderId = paymentCancelInput.getOrderId(); - Long[] ticketIds = paymentCancelInput.getTicketId(); - int cancelAmount = paymentCancelInput.getCancelAmount(); - - Order order = orderService.getOrder(orderId); - - Payment payment = paymentService.getPayment(orderId); - boolean isAllTicketCancelled = areAllTicketIdsMatching(ticketIds, order); - - PaymentCancelResponse paymentCancelResponse = paymentService.cancel(order, payment, isAllTicketCancelled, cancelAmount); - - if (paymentCancelResponse != null) { - // 민약 여기서 에러가 나면? 에러찍기 - ticketService.cancelTickets(order, ticketIds); - } - return paymentCancelResponse; - } - - private boolean areAllTicketIdsMatching(Long[] ticketIds, Order order) { - Set existingTicketIds = ticketService.getTickets(order).stream() - .map(TicketDto::getId) - .collect(Collectors.toSet()); - - return Arrays.stream(ticketIds) - .allMatch(existingTicketIds::contains); - } - -} diff --git a/src/main/java/com/kboticket/service/payment/PaymentService.java b/src/main/java/com/kboticket/service/payment/PaymentService.java index 8d78027..70a155b 100644 --- a/src/main/java/com/kboticket/service/payment/PaymentService.java +++ b/src/main/java/com/kboticket/service/payment/PaymentService.java @@ -93,8 +93,7 @@ public PaymentSuccessResponse paymentSuccess(String paymentKey, String orderId, } // order 상태 변경 - String title = order.getGame().getHomeTeam().getName() + - " VS " + order.getGame().getAwayTeam().getName(); + String title = order.getGame().getHomeTeam().getName() + " VS " + order.getGame().getAwayTeam().getName(); order.setStatus(OrderStatus.COMPLETE); order.setOrderDate(LocalDateTime.now()); order.setName(title); @@ -133,7 +132,7 @@ public PaymentFailResponse paymentFail(String code, String orderId, String messa */ public PaymentCancelResponse paymentCancelPart(Payment payment, String cancelReason, int cancelAmount) { String paymentKey = payment.getPaymentKey(); - PaymentCancelInput input = PaymentCancelInput.builder() + PaymentCancelRequest input = PaymentCancelRequest.builder() .paymentKey(paymentKey) .cancelReason(cancelReason) .cancelAmount(cancelAmount) @@ -159,7 +158,7 @@ public PaymentCancelResponse paymentCancelPart(Payment payment, String cancelRea */ public PaymentCancelResponse paymentCancelAll(Payment payment, String cancelReason) { String paymentKey = payment.getPaymentKey(); - PaymentCancelInput input = PaymentCancelInput.builder() + PaymentCancelRequest input = PaymentCancelRequest.builder() .paymentKey(paymentKey) .cancelReason(cancelReason) .build(); diff --git a/src/main/java/com/kboticket/service/ticket/TicketService.java b/src/main/java/com/kboticket/service/ticket/TicketService.java index 8337512..4376442 100644 --- a/src/main/java/com/kboticket/service/ticket/TicketService.java +++ b/src/main/java/com/kboticket/service/ticket/TicketService.java @@ -2,12 +2,18 @@ import com.kboticket.domain.Order; import com.kboticket.domain.OrderSeat; +import com.kboticket.domain.Payment; import com.kboticket.domain.Ticket; import com.kboticket.dto.TicketDto; +import com.kboticket.dto.payment.PaymentCancelRequest; +import com.kboticket.dto.payment.PaymentCancelResponse; import com.kboticket.enums.ErrorCode; import com.kboticket.enums.TicketStatus; import com.kboticket.exception.KboTicketException; +import com.kboticket.repository.PaymentRepository; import com.kboticket.repository.TicketRepository; +import com.kboticket.repository.order.OrderRepository; +import com.kboticket.service.payment.PaymentService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -15,6 +21,7 @@ import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; @Service @@ -23,6 +30,8 @@ public class TicketService { private final TicketRepository ticketRepository; + private final OrderRepository orderRepository; + private final PaymentRepository paymentRepository; public void createTicket(Order order) { List orderSeats = order.getOrderSeats(); @@ -39,6 +48,40 @@ public void createTicket(Order order) { ticketRepository.saveAll(tickets); } + public PaymentCancelResponse cancel(PaymentCancelRequest request) { + String orderId = request.getOrderId(); + Long[] ticketIds = request.getTicketId(); + int cancelAmount = request.getCancelAmount(); + + Order order = orderRepository.findById(orderId).orElseThrow(() -> { + throw new KboTicketException(ErrorCode.NOT_FOUND_ORDER); + }); + + Payment payment = paymentRepository.findByOrderId(orderId).orElseThrow(() -> { + throw new KboTicketException(ErrorCode.PAYMENT_NOT_FOUND); + }); + + boolean isAllTicketCancelled = areAllTicketIdsMatching(ticketIds, order); + + //PaymentCancelResponse paymentCancelResponse = paymentService.cancel(order, payment, isAllTicketCancelled, cancelAmount); + PaymentCancelResponse paymentCancelResponse = null; + + if (paymentCancelResponse != null) { + // 민약 여기서 에러가 나면? 에러찍기 + cancelTickets(order, ticketIds); + } + return paymentCancelResponse; + } + + private boolean areAllTicketIdsMatching(Long[] ticketIds, Order order) { + Set existingTicketIds = getTickets(order).stream() + .map(TicketDto::getId) + .collect(Collectors.toSet()); + + return Arrays.stream(ticketIds) + .allMatch(existingTicketIds::contains); + } + public void cancelTickets(Order order, Long[] ticketIds) { // 티켓 상태 변경 (ISSUED -> CANCELLED) List ticketsToCancel = Arrays.stream(ticketIds)