diff --git a/src/main/java/com/kboticket/controller/payment/PaymentController.java b/src/main/java/com/kboticket/controller/payment/PaymentController.java index 1206dcf..08c173f 100644 --- a/src/main/java/com/kboticket/controller/payment/PaymentController.java +++ b/src/main/java/com/kboticket/controller/payment/PaymentController.java @@ -5,6 +5,7 @@ import com.kboticket.dto.payment.PaymentRequestDto; import com.kboticket.dto.payment.PaymentSuccessResponse; import com.kboticket.service.payment.PaymentService; +import com.kboticket.service.ticket.TicketService; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -19,6 +20,7 @@ public class PaymentController { private final PaymentService paymentService; + private final TicketService ticketService; /** * 결제 요청 @@ -45,6 +47,11 @@ public CommonResponse success(@RequestParam String payme PaymentSuccessResponse paymentSuccessResponse = paymentService.paymentSuccess(paymentKey, orderId, amount); + // 티켓 생성 + if (paymentSuccessResponse != null) { + ticketService.createTicket(orderId); + } + return new CommonResponse<>(paymentSuccessResponse); } diff --git a/src/main/java/com/kboticket/service/payment/PaymentService.java b/src/main/java/com/kboticket/service/payment/PaymentService.java index 70a155b..77f9f1d 100644 --- a/src/main/java/com/kboticket/service/payment/PaymentService.java +++ b/src/main/java/com/kboticket/service/payment/PaymentService.java @@ -4,18 +4,16 @@ import com.kboticket.config.PaymentConfig; import com.kboticket.config.payment.PaymentClient; import com.kboticket.domain.*; -import com.kboticket.dto.payment.PaymentRequestInput; import com.kboticket.dto.ReservedSeatInfo; import com.kboticket.dto.payment.*; import com.kboticket.enums.ErrorCode; import com.kboticket.enums.PaymentStatus; import com.kboticket.exception.KboTicketException; +import com.kboticket.repository.PaymentRepository; import com.kboticket.repository.SeatRepository; import com.kboticket.repository.UserRepository; import com.kboticket.repository.game.GameRepository; import com.kboticket.repository.order.OrderRepository; -import com.kboticket.repository.PaymentRepository; -import com.kboticket.service.ticket.TicketService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.redisson.api.RBucket; @@ -26,7 +24,10 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; -import java.util.*; +import java.util.HashSet; +import java.util.List; +import java.util.Random; +import java.util.Set; import java.util.stream.Collectors; @Slf4j @@ -38,8 +39,6 @@ public class PaymentService { private final RedissonClient redissonClient; private final PaymentConfig paymentConfig; - private final TicketService ticketService; - private final PaymentRepository paymentRepository; private final OrderRepository orderRepository; private final GameRepository gameRepository; @@ -104,8 +103,6 @@ public PaymentSuccessResponse paymentSuccess(String paymentKey, String orderId, paymentRepository.save(payment); - ticketService.createTicket(order); - return response; } diff --git a/src/main/java/com/kboticket/service/ticket/TicketService.java b/src/main/java/com/kboticket/service/ticket/TicketService.java index 4376442..f0ed4cd 100644 --- a/src/main/java/com/kboticket/service/ticket/TicketService.java +++ b/src/main/java/com/kboticket/service/ticket/TicketService.java @@ -15,6 +15,7 @@ import com.kboticket.repository.order.OrderRepository; import com.kboticket.service.payment.PaymentService; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -24,16 +25,22 @@ import java.util.Set; import java.util.stream.Collectors; +@Slf4j @Service @Transactional @RequiredArgsConstructor public class TicketService { + private final PaymentService paymentService; + private final TicketRepository ticketRepository; private final OrderRepository orderRepository; private final PaymentRepository paymentRepository; - public void createTicket(Order order) { + public void createTicket(String orderId) { + Order order = orderRepository.findById(orderId).orElseThrow(() -> { + throw new KboTicketException(ErrorCode.NOT_FOUND_ORDER); + }); List orderSeats = order.getOrderSeats(); List tickets = orderSeats.stream() .map(orderSeat -> Ticket.builder() @@ -63,12 +70,16 @@ public PaymentCancelResponse cancel(PaymentCancelRequest request) { boolean isAllTicketCancelled = areAllTicketIdsMatching(ticketIds, order); - //PaymentCancelResponse paymentCancelResponse = paymentService.cancel(order, payment, isAllTicketCancelled, cancelAmount); PaymentCancelResponse paymentCancelResponse = null; + try { + paymentCancelResponse = paymentService.cancel(order, payment, isAllTicketCancelled, cancelAmount); - if (paymentCancelResponse != null) { - // 민약 여기서 에러가 나면? 에러찍기 - cancelTickets(order, ticketIds); + if (paymentCancelResponse != null) { + cancelTickets(order, ticketIds); + } + } catch (Exception e) { + log.error(e.getMessage()); + throw new KboTicketException(ErrorCode.PAYMENT_CANCEL_EXCEPTION, null, log::error); } return paymentCancelResponse; } diff --git a/src/test/java/com/kboticket/controller/payment/PaymentControllerTest.java b/src/test/java/com/kboticket/controller/payment/PaymentControllerTest.java index 59419fa..3c8d01a 100644 --- a/src/test/java/com/kboticket/controller/payment/PaymentControllerTest.java +++ b/src/test/java/com/kboticket/controller/payment/PaymentControllerTest.java @@ -1,8 +1,7 @@ package com.kboticket.controller.payment; -import com.kboticket.enums.PaymentStatus; -import com.kboticket.service.order.OrderService; import com.kboticket.service.payment.PaymentService; +import com.kboticket.service.ticket.TicketService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -24,12 +23,15 @@ public class PaymentControllerTest { @MockBean private PaymentService paymentService; + @MockBean + private TicketService ticketService; + @Mock private Authentication authentication; @BeforeEach void setUp() { - PaymentController paymentController = new PaymentController(paymentService); + PaymentController paymentController = new PaymentController(paymentService, ticketService); this.mockMvc = MockMvcBuilders.standaloneSetup(paymentController).build(); }