diff --git a/server/src/main/java/com/ticketing/server/movie/service/TicketServiceImpl.java b/server/src/main/java/com/ticketing/server/movie/service/TicketServiceImpl.java index 58bd582..f24b2d2 100644 --- a/server/src/main/java/com/ticketing/server/movie/service/TicketServiceImpl.java +++ b/server/src/main/java/com/ticketing/server/movie/service/TicketServiceImpl.java @@ -109,7 +109,7 @@ public class TicketServiceImpl implements TicketService { @Override @Transactional - public TicketsRefundDTO myTicketsRefund(@NotNull Long paymentId) { + public TicketsRefundDTO ticketRefundByDateTime(@NotNull Long paymentId) { List tickets = ticketRepository.findTicketFetchJoinByPaymentId(paymentId); LocalDateTime now = LocalDateTime.now(); @@ -121,6 +121,19 @@ public class TicketServiceImpl implements TicketService { return new TicketsRefundDTO(refundDtoList); } + @Override + @Transactional + public TicketsRefundDTO ticketsRefund(@NotNull Long paymentId) { + List tickets = ticketRepository.findTicketFetchJoinByPaymentId(paymentId); + + List refundDtoList = tickets.stream() + .map(Ticket::refund) + .map(TicketRefundDTO::new) + .collect(Collectors.toList()); + + return new TicketsRefundDTO(refundDtoList); + } + private List getTicketsByInTicketIds(List ticketIds) { List tickets = ticketRepository.findTicketFetchJoinByTicketIds(ticketIds); diff --git a/server/src/main/java/com/ticketing/server/movie/service/interfaces/TicketService.java b/server/src/main/java/com/ticketing/server/movie/service/interfaces/TicketService.java index 91d8538..1d85521 100644 --- a/server/src/main/java/com/ticketing/server/movie/service/interfaces/TicketService.java +++ b/server/src/main/java/com/ticketing/server/movie/service/interfaces/TicketService.java @@ -22,5 +22,7 @@ public interface TicketService { TicketsCancelDTO ticketCancel(@NotEmptyCollection List ticketIds); - TicketsRefundDTO myTicketsRefund(@NotNull Long paymentId); + TicketsRefundDTO ticketRefundByDateTime(@NotNull Long paymentId); + + TicketsRefundDTO ticketsRefund(@NotNull Long paymentId); } diff --git a/server/src/main/java/com/ticketing/server/movie/setup/MovieSetupService.java b/server/src/main/java/com/ticketing/server/movie/setup/MovieSetupService.java index f6b1289..5c58970 100644 --- a/server/src/main/java/com/ticketing/server/movie/setup/MovieSetupService.java +++ b/server/src/main/java/com/ticketing/server/movie/setup/MovieSetupService.java @@ -46,7 +46,7 @@ MovieSetupService { initTheater(); initMovieTime(); initTicket(); - initPayment(); +// initPayment(); } private void initMovie() { diff --git a/server/src/main/java/com/ticketing/server/payment/api/MovieClient.java b/server/src/main/java/com/ticketing/server/payment/api/MovieClient.java index ea7bca0..4732741 100644 --- a/server/src/main/java/com/ticketing/server/payment/api/MovieClient.java +++ b/server/src/main/java/com/ticketing/server/payment/api/MovieClient.java @@ -21,5 +21,7 @@ public interface MovieClient { TicketCancelResponse ticketCancel(@NotNull TicketCancelRequest request); - TicketsRefundResponse myTicketRefund(TicketsRefundRequest request); + TicketsRefundResponse ticketRefundByDateTime(TicketsRefundRequest request); + + TicketsRefundResponse ticketRefund(TicketsRefundRequest request); } diff --git a/server/src/main/java/com/ticketing/server/payment/api/impl/MovieClientImpl.java b/server/src/main/java/com/ticketing/server/payment/api/impl/MovieClientImpl.java index 3e0b69b..bd98d5b 100644 --- a/server/src/main/java/com/ticketing/server/payment/api/impl/MovieClientImpl.java +++ b/server/src/main/java/com/ticketing/server/payment/api/impl/MovieClientImpl.java @@ -52,8 +52,14 @@ public class MovieClientImpl implements MovieClient { } @Override - public TicketsRefundResponse myTicketRefund(TicketsRefundRequest request) { - TicketsRefundDTO ticketsRefundDto = ticketService.myTicketsRefund(request.getPaymentId()); + public TicketsRefundResponse ticketRefundByDateTime(TicketsRefundRequest request) { + TicketsRefundDTO ticketsRefundDto = ticketService.ticketRefundByDateTime(request.getPaymentId()); + return ticketsRefundDto.toResponse(); + } + + @Override + public TicketsRefundResponse ticketRefund(TicketsRefundRequest request) { + TicketsRefundDTO ticketsRefundDto = ticketService.ticketRefundByDateTime(request.getPaymentId()); return ticketsRefundDto.toResponse(); } diff --git a/server/src/main/java/com/ticketing/server/payment/application/PaymentController.java b/server/src/main/java/com/ticketing/server/payment/application/PaymentController.java index af308f3..f352ee4 100644 --- a/server/src/main/java/com/ticketing/server/payment/application/PaymentController.java +++ b/server/src/main/java/com/ticketing/server/payment/application/PaymentController.java @@ -1,5 +1,6 @@ package com.ticketing.server.payment.application; +import static com.ticketing.server.user.domain.UserGrade.ROLES.STAFF; import static com.ticketing.server.user.domain.UserGrade.ROLES.USER; import com.ticketing.server.payment.application.request.PaymentReadyRequest; @@ -98,4 +99,13 @@ public class PaymentController { .body(paymentRefundDto.toResponse()); } + @PostMapping("/staff/refund") + @Secured(STAFF) + public ResponseEntity adminRefund(@RequestBody @Valid PaymentRefundRequest request) { + PaymentRefundDTO paymentRefundDto = paymentApisService.paymentRefund(request.getPaymentId()); + + return ResponseEntity.status(HttpStatus.OK) + .body(paymentRefundDto.toResponse()); + } + } diff --git a/server/src/main/java/com/ticketing/server/payment/service/PaymentApisServiceImpl.java b/server/src/main/java/com/ticketing/server/payment/service/PaymentApisServiceImpl.java index 515f09c..d0932a9 100644 --- a/server/src/main/java/com/ticketing/server/payment/service/PaymentApisServiceImpl.java +++ b/server/src/main/java/com/ticketing/server/payment/service/PaymentApisServiceImpl.java @@ -176,7 +176,25 @@ public class PaymentApisServiceImpl implements PaymentApisService { ); // 내부 환불진행 - TicketsRefundResponse refundResponse = movieClient.myTicketRefund(new TicketsRefundRequest(payment.getId())); + TicketsRefundResponse refundResponse = movieClient.ticketRefundByDateTime(new TicketsRefundRequest(payment.getId())); + payment.refund(); + + return new PaymentRefundDTO(payment, kakaoPayCancelResponse, refundResponse); + } + + @Override + public PaymentRefundDTO paymentRefund(@NotNull Long paymentId) { + Payment payment = paymentRepository.findById(paymentId) + .orElseThrow(ErrorCode::throwPaymentIdNotFound); + + // 카카오페이 환불 + KakaoPayCancelResponse kakaoPayCancelResponse = kakaoPayClient.cancel( + kakaoPayProperties.getAuthorization(), + new KakaoPayCancelRequest(payment.getTid(), payment.getTotalPrice()) + ); + + // 내부 환불진행 + TicketsRefundResponse refundResponse = movieClient.ticketRefund(new TicketsRefundRequest(payment.getId())); payment.refund(); return new PaymentRefundDTO(payment, kakaoPayCancelResponse, refundResponse); diff --git a/server/src/main/java/com/ticketing/server/payment/service/interfaces/PaymentApisService.java b/server/src/main/java/com/ticketing/server/payment/service/interfaces/PaymentApisService.java index bbba397..78b1cae 100644 --- a/server/src/main/java/com/ticketing/server/payment/service/interfaces/PaymentApisService.java +++ b/server/src/main/java/com/ticketing/server/payment/service/interfaces/PaymentApisService.java @@ -21,4 +21,6 @@ public interface PaymentApisService { PaymentCancelDTO cancel(@NotEmpty String email); PaymentRefundDTO myPaymentRefund(@NotNull Long paymentId); + + PaymentRefundDTO paymentRefund(@NotNull Long paymentId); }