feat: 관리자 환불 구현

This commit is contained in:
dongHyo
2022-07-15 17:40:00 +09:00
parent 78d6f1a98c
commit 123774e06f
8 changed files with 60 additions and 7 deletions

View File

@@ -109,7 +109,7 @@ public class TicketServiceImpl implements TicketService {
@Override
@Transactional
public TicketsRefundDTO myTicketsRefund(@NotNull Long paymentId) {
public TicketsRefundDTO ticketRefundByDateTime(@NotNull Long paymentId) {
List<Ticket> 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<Ticket> tickets = ticketRepository.findTicketFetchJoinByPaymentId(paymentId);
List<TicketRefundDTO> refundDtoList = tickets.stream()
.map(Ticket::refund)
.map(TicketRefundDTO::new)
.collect(Collectors.toList());
return new TicketsRefundDTO(refundDtoList);
}
private List<Ticket> getTicketsByInTicketIds(List<Long> ticketIds) {
List<Ticket> tickets = ticketRepository.findTicketFetchJoinByTicketIds(ticketIds);

View File

@@ -22,5 +22,7 @@ public interface TicketService {
TicketsCancelDTO ticketCancel(@NotEmptyCollection List<Long> ticketIds);
TicketsRefundDTO myTicketsRefund(@NotNull Long paymentId);
TicketsRefundDTO ticketRefundByDateTime(@NotNull Long paymentId);
TicketsRefundDTO ticketsRefund(@NotNull Long paymentId);
}

View File

@@ -46,7 +46,7 @@ MovieSetupService {
initTheater();
initMovieTime();
initTicket();
initPayment();
// initPayment();
}
private void initMovie() {

View File

@@ -21,5 +21,7 @@ public interface MovieClient {
TicketCancelResponse ticketCancel(@NotNull TicketCancelRequest request);
TicketsRefundResponse myTicketRefund(TicketsRefundRequest request);
TicketsRefundResponse ticketRefundByDateTime(TicketsRefundRequest request);
TicketsRefundResponse ticketRefund(TicketsRefundRequest request);
}

View File

@@ -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();
}

View File

@@ -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<PaymentRefundResponse> adminRefund(@RequestBody @Valid PaymentRefundRequest request) {
PaymentRefundDTO paymentRefundDto = paymentApisService.paymentRefund(request.getPaymentId());
return ResponseEntity.status(HttpStatus.OK)
.body(paymentRefundDto.toResponse());
}
}

View File

@@ -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);

View File

@@ -21,4 +21,6 @@ public interface PaymentApisService {
PaymentCancelDTO cancel(@NotEmpty String email);
PaymentRefundDTO myPaymentRefund(@NotNull Long paymentId);
PaymentRefundDTO paymentRefund(@NotNull Long paymentId);
}