Skip to content

Commit 839131d

Browse files
authored
refactor: 결재 로직 변경 (#403)
1 parent 357492b commit 839131d

29 files changed

Lines changed: 425 additions & 1924 deletions
Lines changed: 11 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,15 @@
11
package com.back.b2st.domain.payment.controller;
22

33
import org.springframework.http.ResponseEntity;
4-
import org.springframework.web.bind.annotation.PathVariable;
54
import org.springframework.web.bind.annotation.PostMapping;
65
import org.springframework.web.bind.annotation.RequestBody;
76
import org.springframework.web.bind.annotation.RequestMapping;
87
import org.springframework.web.bind.annotation.RestController;
98

10-
import com.back.b2st.domain.payment.dto.request.PaymentCancelReq;
11-
import com.back.b2st.domain.payment.dto.request.PaymentConfirmReq;
12-
import com.back.b2st.domain.payment.dto.request.PaymentFailReq;
13-
import com.back.b2st.domain.payment.dto.request.PaymentPrepareReq;
14-
import com.back.b2st.domain.payment.dto.response.PaymentCancelRes;
9+
import com.back.b2st.domain.payment.dto.request.PaymentPayReq;
1510
import com.back.b2st.domain.payment.dto.response.PaymentConfirmRes;
16-
import com.back.b2st.domain.payment.dto.response.PaymentFailRes;
17-
import com.back.b2st.domain.payment.dto.response.PaymentPrepareRes;
1811
import com.back.b2st.domain.payment.entity.Payment;
19-
import com.back.b2st.domain.payment.service.PaymentCancelService;
20-
import com.back.b2st.domain.payment.service.PaymentConfirmService;
21-
import com.back.b2st.domain.payment.service.PaymentFailService;
22-
import com.back.b2st.domain.payment.service.PaymentPrepareService;
23-
import com.back.b2st.domain.reservation.service.ReservationService;
12+
import com.back.b2st.domain.payment.service.PaymentOneClickService;
2413
import com.back.b2st.global.annotation.CurrentUser;
2514
import com.back.b2st.global.common.BaseResponse;
2615
import com.back.b2st.security.UserPrincipal;
@@ -37,66 +26,20 @@
3726
@RequestMapping("/api/payments")
3827
public class PaymentController {
3928

40-
private final PaymentPrepareService paymentPrepareService;
41-
private final PaymentConfirmService paymentConfirmService;
42-
private final PaymentCancelService paymentCancelService;
43-
private final PaymentFailService paymentFailService;
44-
45-
private final ReservationService reservationService;
29+
private final PaymentOneClickService paymentOneClickService;
4630

4731
@Operation(
48-
summary = "결제 준비",
49-
description = "결제 정보를 생성하고 orderId를 반환합니다."
32+
summary = "원클릭 결제 (PG 미사용)",
33+
description = "결제 준비/승인/도메인 후처리를 한 번에 수행합니다.\n\n"
34+
+ "- LOTTERY: entryId(UUID) 필수\n"
35+
+ "- 그 외: domainId(Long) 필수"
5036
)
51-
@PostMapping("/prepare")
52-
public ResponseEntity<BaseResponse<PaymentPrepareRes>> prepare(
37+
@PostMapping("/pay")
38+
public ResponseEntity<BaseResponse<PaymentConfirmRes>> pay(
5339
@Parameter(hidden = true) @CurrentUser UserPrincipal user,
54-
@Valid @RequestBody PaymentPrepareReq request
40+
@Valid @RequestBody PaymentPayReq request
5541
) {
56-
Payment payment = paymentPrepareService.prepare(user.getId(), request);
57-
return ResponseEntity.ok(BaseResponse.created(PaymentPrepareRes.from(payment)));
58-
}
59-
60-
@Operation(
61-
summary = "결제 승인",
62-
description = "결제를 승인하고 도메인별 후처리를 수행합니다."
63-
)
64-
@PostMapping("/confirm")
65-
public ResponseEntity<BaseResponse<PaymentConfirmRes>> confirm(
66-
@Parameter(hidden = true) @CurrentUser UserPrincipal user,
67-
@Valid @RequestBody PaymentConfirmReq request
68-
) {
69-
Payment payment = paymentConfirmService.confirm(user.getId(), request);
42+
Payment payment = paymentOneClickService.pay(user.getId(), request);
7043
return ResponseEntity.ok(BaseResponse.success(PaymentConfirmRes.from(payment)));
7144
}
72-
73-
@Operation(
74-
summary = "결제 취소",
75-
description = "완료된 결제를 취소합니다.\n\n"
76-
+ "- 티켓 거래(TRADE) 결제는 취소/환불을 지원하지 않습니다.\n"
77-
+ "- 예매(RESERVATION) 결제는 취소/환불을 지원하지 않습니다."
78-
)
79-
@PostMapping("/{orderId}/cancel")
80-
public ResponseEntity<BaseResponse<PaymentCancelRes>> cancel(
81-
@Parameter(description = "주문 ID", example = "ORDER-123") @PathVariable("orderId") String orderId,
82-
@Valid @RequestBody PaymentCancelReq request,
83-
@Parameter(hidden = true) @CurrentUser UserPrincipal user
84-
) {
85-
Payment canceledPayment = paymentCancelService.cancel(user.getId(), orderId, request);
86-
return ResponseEntity.ok(BaseResponse.success(PaymentCancelRes.from(canceledPayment)));
87-
}
88-
89-
@Operation(
90-
summary = "결제 실패 처리",
91-
description = "결제 실패 시 호출되며, 도메인별 실패 후처리를 수행합니다."
92-
)
93-
@PostMapping("/{orderId}/fail")
94-
public ResponseEntity<BaseResponse<PaymentFailRes>> fail(
95-
@Parameter(description = "주문 ID", example = "ORDER-123") @PathVariable("orderId") String orderId,
96-
@Valid @RequestBody PaymentFailReq request,
97-
@Parameter(hidden = true) @CurrentUser UserPrincipal user
98-
) {
99-
Payment payment = paymentFailService.fail(user.getId(), orderId, request.reason().name());
100-
return ResponseEntity.ok(BaseResponse.success(PaymentFailRes.from(payment)));
101-
}
10245
}

src/main/java/com/back/b2st/domain/payment/dto/request/PaymentCancelReq.java

Lines changed: 0 additions & 9 deletions
This file was deleted.

src/main/java/com/back/b2st/domain/payment/dto/request/PaymentConfirmReq.java

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/main/java/com/back/b2st/domain/payment/dto/request/PaymentFailReason.java

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/main/java/com/back/b2st/domain/payment/dto/request/PaymentFailReq.java

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.back.b2st.domain.payment.dto.request;
2+
3+
import java.util.UUID;
4+
5+
import com.back.b2st.domain.payment.entity.DomainType;
6+
import com.back.b2st.domain.payment.entity.PaymentMethod;
7+
8+
import jakarta.validation.constraints.NotNull;
9+
10+
public record PaymentPayReq(
11+
@NotNull DomainType domainType,
12+
@NotNull PaymentMethod paymentMethod,
13+
Long domainId,
14+
UUID entryId
15+
) {
16+
}
17+

src/main/java/com/back/b2st/domain/payment/dto/response/PaymentCancelRes.java

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/main/java/com/back/b2st/domain/payment/dto/response/PaymentFailRes.java

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/main/java/com/back/b2st/domain/payment/dto/response/PaymentPrepareRes.java

Lines changed: 0 additions & 24 deletions
This file was deleted.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.back.b2st.domain.payment.service;
2+
3+
import java.util.UUID;
4+
5+
import org.springframework.stereotype.Service;
6+
import org.springframework.transaction.annotation.Transactional;
7+
8+
import com.back.b2st.domain.lottery.result.dto.LotteryPaymentInfo;
9+
import com.back.b2st.domain.lottery.result.repository.LotteryResultRepository;
10+
import com.back.b2st.domain.payment.dto.request.PaymentPrepareReq;
11+
import com.back.b2st.domain.payment.entity.DomainType;
12+
import com.back.b2st.domain.payment.entity.Payment;
13+
import com.back.b2st.domain.payment.entity.PaymentMethod;
14+
import com.back.b2st.domain.payment.error.PaymentErrorCode;
15+
import com.back.b2st.global.error.exception.BusinessException;
16+
17+
import lombok.RequiredArgsConstructor;
18+
19+
@Service
20+
@RequiredArgsConstructor
21+
public class LotteryPaymentPrepareService {
22+
23+
private final LotteryResultRepository lotteryResultRepository;
24+
private final PaymentPrepareService paymentPrepareService;
25+
26+
@Transactional
27+
public Payment prepareByEntryUuid(Long memberId, UUID entryUuid, PaymentMethod paymentMethod) {
28+
LotteryPaymentInfo info = lotteryResultRepository.findPaymentInfoByid(entryUuid);
29+
if (info == null) {
30+
throw new BusinessException(PaymentErrorCode.DOMAIN_NOT_FOUND);
31+
}
32+
33+
if (!info.memberId().equals(memberId)) {
34+
throw new BusinessException(PaymentErrorCode.UNAUTHORIZED_PAYMENT_ACCESS);
35+
}
36+
37+
return paymentPrepareService.prepare(
38+
memberId,
39+
new PaymentPrepareReq(DomainType.LOTTERY, info.id(), paymentMethod)
40+
);
41+
}
42+
}
43+

0 commit comments

Comments
 (0)