Skip to content

Commit 4d0410e

Browse files
authored
Merge pull request #170 from kt-cloud-basic-project/SHOP-133
refactor: ๊ฒฐ์ œ ๋ฆฌํŒฉํ† ๋ง
2 parents a438a55 + b9cffc4 commit 4d0410e

8 files changed

Lines changed: 40 additions & 26 deletions

File tree

โ€Žsrc/main/java/com/kt/controller/payment/PaymentController.javaโ€Ž

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,16 @@ public ApiResult<Void> create(@Valid @RequestBody PaymentCreateRequest request,
9191
public ResponseEntity<?> confirmPayment(@RequestBody PaymentTossConfirmRequest request,
9292
@AuthenticationPrincipal CustomUserDetails currentUser
9393
) {
94+
String orderId = request.orderId().split("-")[0];
95+
Long orderIdLong = Long.parseLong(orderId);
96+
9497
try {
9598
String url = tossPaymentsProperties.getApiUrl() + "/confirm";
9699
String auth = tossPaymentsProperties.getSecretKey() + ":";
97100
String encodedAuth = java.util.Base64.getEncoder().encodeToString(auth.getBytes(StandardCharsets.UTF_8));
98101

99-
String orderId = request.orderId().split("-")[0];
100-
Long orderIdLong = Long.parseLong(orderId);
101-
var order = orderService.getOrderDetail(orderIdLong, currentUser.getId());
102-
if (order.orderStatus() != OrderStatus.ORDERED) {
102+
var order = orderService.getOrderDetail(currentUser.getId(), orderIdLong);
103+
if (order.orderStatus() != OrderStatus.PENDING_PAYMENT) {
103104
return ResponseEntity
104105
.status(HttpStatus.BAD_REQUEST)
105106
.body(Map.of(
@@ -141,7 +142,7 @@ public ResponseEntity<?> confirmPayment(@RequestBody PaymentTossConfirmRequest r
141142
} catch (Exception e) {
142143
e.printStackTrace();
143144

144-
//TODO order ์ƒ์„ฑ ๊ธฐ๋ก rollback
145+
orderService.rollback(orderIdLong);
145146
return ResponseEntity
146147
.status(HttpStatus.INTERNAL_SERVER_ERROR)
147148
.body(Map.of(

โ€Žsrc/main/java/com/kt/domain/order/Order.javaโ€Ž

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public Order(String receiverName, String receiverPhone, String receiverAddress,
5252
this.receiverName = receiverName;
5353
this.receiverPhone = receiverPhone;
5454
this.receiverAddress = receiverAddress;
55-
this.orderStatus = OrderStatus.ORDERED;
55+
this.orderStatus = OrderStatus.PENDING_PAYMENT;
5656
this.isDeleted = false;
5757

5858
this.user = user;
@@ -85,6 +85,8 @@ public void approveReturn() {
8585
this.orderStatus = OrderStatus.RETURNED;
8686
}
8787

88+
public void failPayment() { this.orderStatus = OrderStatus.PAYMENT_FAILED; }
89+
8890
public void updateStatus(OrderStatus newStatus) {
8991
this.orderStatus = newStatus;
9092

โ€Žsrc/main/java/com/kt/domain/order/OrderStatus.javaโ€Ž

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@
66
@Getter
77
@RequiredArgsConstructor
88
public enum OrderStatus {
9-
ORDERED("์ฃผ๋ฌธ ์™„๋ฃŒ"),
9+
// ORDERED("์ฃผ๋ฌธ ์™„๋ฃŒ"),
10+
PENDING_PAYMENT("๊ฒฐ์ œ ๋Œ€๊ธฐ"),
11+
PAYMENT_FAILED("๊ฒฐ์ œ ์‹คํŒจ"),
1012
PAID("๊ฒฐ์ œ ์™„๋ฃŒ"),
13+
1114
PROCESSING("๋ฐฐ์†ก ์ „"),
1215
SHIPPED("๋ฐฐ์†ก ์ค‘"),
1316
DELIVERED("๋ฐฐ์†ก ์™„๋ฃŒ"),
@@ -16,10 +19,7 @@ public enum OrderStatus {
1619
RETURN_REQUESTED("๋ฐ˜ํ’ˆ ์š”์ฒญ"),
1720
RETURNED("๋ฐ˜ํ’ˆ ์™„๋ฃŒ"),
1821
REFUND_REQUESTED("ํ™˜๋ถˆ ์š”์ฒญ"),
19-
REFUNDED("ํ™˜๋ถˆ ์™„๋ฃŒ"),
20-
21-
PENDING_PAYMENT("๊ฒฐ์ œ ๋Œ€๊ธฐ"),
22-
PAYMENT_FAILED("๊ฒฐ์ œ ์‹คํŒจ");
22+
REFUNDED("ํ™˜๋ถˆ ์™„๋ฃŒ");
2323

2424
private final String description;
2525
}

โ€Žsrc/main/java/com/kt/service/order/OrderService.javaโ€Ž

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import org.springframework.data.domain.Page;
1111
import org.springframework.stereotype.Service;
12+
import org.springframework.transaction.annotation.Propagation;
1213
import org.springframework.transaction.annotation.Transactional;
1314

1415
import com.kt.common.exception.CustomException;
@@ -131,6 +132,12 @@ public void save(Long orderId){
131132
order.updateStatus(OrderStatus.PAID);
132133
}
133134

135+
@Transactional(propagation = Propagation.REQUIRES_NEW)
136+
public void rollback(Long orderId){
137+
var order = orderRepository.findByIdOrThrow(orderId, ErrorCode.NOT_FOUND_ORDER);
138+
order.failPayment();
139+
}
140+
134141
public Page<OrderListResponse> getOrderList(Long userId, Paging paging) {
135142
Page<Order> orders = orderRepositoryCustom.getOrders(userId, paging.toPageable());
136143

@@ -176,7 +183,8 @@ public void cancel(Long orderId, Long userId) {
176183
Preconditions.validate(order.getUser().getId().equals(userId), ErrorCode.NOT_ORDER_OWNER);
177184

178185
// ์ฃผ๋ฌธ ์ทจ์†Œ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ
179-
Preconditions.validate(order.getOrderStatus() == OrderStatus.ORDERED ||
186+
Preconditions.validate(order.getOrderStatus() == OrderStatus.PENDING_PAYMENT ||
187+
order.getOrderStatus() == OrderStatus.PAYMENT_FAILED ||
180188
order.getOrderStatus() == OrderStatus.PAID, ErrorCode.CANNOT_CANCEL_ORDER);
181189

182190
order.cancel();
@@ -224,8 +232,9 @@ public void update(OrderUpdateRequest request, Long orderId, Long userId) {
224232

225233
Preconditions.validate(order.getUser().getId().equals(userId), ErrorCode.NOT_ORDER_OWNER);
226234

227-
Preconditions.validate(order.getOrderStatus() == OrderStatus.ORDERED ||
228-
order.getOrderStatus() == OrderStatus.PAID, ErrorCode.CANNOT_UPDATE_ORDER_INFO);
235+
Preconditions.validate(order.getOrderStatus() == OrderStatus.PENDING_PAYMENT ||
236+
order.getOrderStatus() == OrderStatus.PAID ||
237+
order.getOrderStatus() == OrderStatus.PAYMENT_FAILED , ErrorCode.CANNOT_UPDATE_ORDER_INFO);
229238

230239
String updatedAddress = request.receiverAddressId() != null
231240
? shoppingAddressRepository.findByIdAndUserIdOrThrow(request.receiverAddressId(), userId, ErrorCode.NOT_SHOPPING_ADDRESS_OWNER).getAddress()
@@ -243,7 +252,8 @@ public void cancelByAdmin(Long orderId) {
243252
var order = orderRepository.findByIdOrThrow(orderId, ErrorCode.NOT_FOUND_ORDER);
244253

245254
// ์ฃผ๋ฌธ ์ทจ์†Œ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€์ฆ
246-
Preconditions.validate(order.getOrderStatus() == OrderStatus.ORDERED ||
255+
Preconditions.validate(order.getOrderStatus() == OrderStatus.PENDING_PAYMENT ||
256+
order.getOrderStatus() == OrderStatus.PAYMENT_FAILED ||
247257
order.getOrderStatus() == OrderStatus.PAID, ErrorCode.CANNOT_CANCEL_ORDER);
248258

249259
order.cancel();

โ€Žsrc/main/java/com/kt/service/payment/PaymentFacade.javaโ€Ž

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@ public class PaymentFacade {
1717

1818
@Transactional
1919
public Long completePayment(Map<String, Object> tossResponse, Long userId, Long orderId) {
20-
var paymentId = paymentService.create(tossResponse, userId);
21-
orderService.save(orderId);
22-
23-
return paymentId;
20+
try {
21+
var paymentId = paymentService.create(tossResponse, userId, orderId);
22+
orderService.save(orderId);
23+
return paymentId;
24+
} catch (Exception e) {
25+
orderService.rollback(orderId);
26+
throw e;
27+
}
2428
}
2529
}

โ€Žsrc/main/java/com/kt/service/payment/PaymentService.javaโ€Ž

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,8 @@ public class PaymentService {
5151
private final OrderRepositoryCustom orderRepositoryCustom;
5252
private final OrderProductRepositoryCustom orderProductRepositoryCustom;
5353

54-
public Long create(Map<String, Object> tossResponse, Long userId) {
55-
String orderId = tossResponse.get("orderId").toString().split("-")[0];
56-
57-
var order = orderRepository.findByIdAndUserIdOrThrow(Long.parseLong(orderId), userId, ErrorCode.NOT_FOUND_ORDER);
54+
public Long create(Map<String, Object> tossResponse, Long userId, Long orderId) {
55+
var order = orderRepository.findByIdAndUserIdOrThrow(orderId, userId, ErrorCode.NOT_FOUND_ORDER);
5856

5957
var paymentType = paymentTypeRepository.findByName(tossResponse.get("method").toString()).orElseThrow();
6058

โ€Žsrc/test/java/com/kt/service/order/OrderServiceTest.javaโ€Ž

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,6 @@ void initOrderTestData() {
274274
OrderDetailResponse orderDetail = orderService.getOrderDetail(user.getId(), orderId);
275275

276276
//then
277-
assertThat(orderDetail.orderStatus()).isEqualTo(OrderStatus.ORDERED);
278277
assertThat(orderDetail.receiverName()).isEqualTo(user.getName());
279278
assertThat(orderDetail.receiverPhone()).isEqualTo(user.getMobile());
280279
assertThat(orderDetail.receiverAddress()).isEqualTo(savedAddress.getAddress());

โ€Žsrc/test/java/com/kt/service/payment/PaymentServiceTest.javaโ€Ž

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ void setUp() {
108108

109109
@Test
110110
void ์ฃผ๋ฌธ์—_๋Œ€ํ•œ_๊ฒฐ์ œ_์ƒ์„ฑ_๊ฐ€๋Šฅ() {
111-
paymentService.create(ํ† ์Šค_๊ฒฐ์ œ_์‘๋‹ต(), user.getId());
111+
paymentService.create(ํ† ์Šค_๊ฒฐ์ œ_์‘๋‹ต(), user.getId(), order.getId());
112112

113113
Payment payment = paymentRepository.findAll().get(0);
114114

@@ -133,7 +133,7 @@ void setUp() {
133133
new DiscountMembership(membershipDiscount, membership)
134134
);
135135

136-
paymentService.create(ํ† ์Šค_๊ฒฐ์ œ_์‘๋‹ต(), user.getId());
136+
paymentService.create(ํ† ์Šค_๊ฒฐ์ œ_์‘๋‹ต(), user.getId(), order.getId());
137137

138138
Payment payment = paymentRepository.findAll().get(0);
139139

0 commit comments

Comments
ย (0)