Skip to content

Commit 4d02ee4

Browse files
committed
refactor: 결제 요청 서비스 로직 수정
1 parent c8d685f commit 4d02ee4

13 files changed

Lines changed: 122 additions & 14 deletions

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.loopers.application.event.payment;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import org.springframework.stereotype.Component;
5+
6+
@Component
7+
@RequiredArgsConstructor
8+
public class PaymentEventHandler {
9+
}
Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
package com.loopers.application.order;
22

3-
public record OrderCreatedEvent(Long couponId) {
3+
import com.loopers.interfaces.api.payment.PaymentV1Dto;
4+
5+
public record OrderCreatedEvent(
6+
Long couponId,
7+
String orderId,
8+
PaymentV1Dto.CardTypeDto cardType,
9+
String cardNo,
10+
Long amount,
11+
String callbackUrl
12+
) {
413
}

apps/commerce-api/src/main/java/com/loopers/application/order/OrderFacade.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.loopers.domain.product.ProductRepository;
1313
import com.loopers.domain.user.UserRepository;
1414
import com.loopers.interfaces.api.order.OrderV1Dto;
15+
import com.loopers.interfaces.api.payment.PaymentV1Dto;
1516
import com.loopers.support.error.CoreException;
1617
import com.loopers.support.error.ErrorType;
1718
import lombok.RequiredArgsConstructor;
@@ -91,7 +92,7 @@ public OrderResultInfo createOrder(OrderV1Dto.OrderRequest request) {
9192
.multiply(BigDecimal.valueOf(100 - rate))
9293
.divide(BigDecimal.valueOf(100));
9394

94-
publisher.publishEvent(new OrderCreatedEvent(couponId));
95+
publisher.publishEvent(new OrderCreatedEvent(couponId, null, null, null, null, null));
9596

9697
Order order = request.toEntity(totalPrice);
9798
Order saved = orderRepository.save(order);
@@ -103,6 +104,15 @@ public OrderResultInfo createOrder(OrderV1Dto.OrderRequest request) {
103104
.map(orderItem -> OrderItemInfo.from(orderItem, orderItem.getOrderPrice()))
104105
.toList();
105106

107+
publisher.publishEvent(new OrderCreatedEvent(
108+
couponId,
109+
"1351039135",
110+
PaymentV1Dto.CardTypeDto.HYUNDAI,
111+
"1234-5678-9814-1451",
112+
100000L,
113+
"http://localhost:8080/api/v1/examples/callback"
114+
));
115+
106116
return new OrderResultInfo(OrderInfo.from(saved), orderItemInfos);
107117
}
108118
}

apps/commerce-api/src/main/java/com/loopers/application/payment/PaymentFacade.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.loopers.application.payment;
22

3+
import com.loopers.domain.payment.Payment;
4+
import com.loopers.domain.payment.PaymentStatus;
35
import com.loopers.infrastructure.payment.client.PgClient;
46
import com.loopers.interfaces.api.ApiResponse;
57
import com.loopers.interfaces.api.payment.PaymentV1Dto;
@@ -11,17 +13,28 @@
1113
@RequiredArgsConstructor
1214
public class PaymentFacade {
1315
private final PgClient pgClient;
16+
private final PaymentRepository paymentRepository;
1417

1518
@CircuitBreaker(name = "pgCircuit", fallbackMethod = "fallback")
16-
public PaymentV1Dto.TransactionResponse requestPayment(String userId, PaymentV1Dto.PaymentRequest request) {
17-
ApiResponse<PaymentV1Dto.TransactionResponse> result = pgClient.requestPayment(userId, request);
19+
public PaymentV1Dto.TransactionResponse requestPayment(String userId, PaymentV1Dto.PgPaymentRequest pgPaymentRequest) {
20+
ApiResponse<PaymentV1Dto.TransactionResponse> result = pgClient.requestPayment(userId, pgPaymentRequest);
1821

1922
PaymentV1Dto.TransactionResponse response = result.data();
2023

24+
PaymentV1Dto.PaymentRequest paymentRequest = new PaymentV1Dto.PaymentRequest(
25+
userId,
26+
pgPaymentRequest.orderId(),
27+
response.transactionKey(),
28+
PaymentStatus.PENDING
29+
);
30+
31+
Payment payment = Payment.create(paymentRequest);
32+
paymentRepository.save(payment);
33+
2134
return response;
2235
}
2336

24-
public PaymentV1Dto.TransactionResponse fallback(String userId, PaymentV1Dto.PaymentRequest request, Throwable throwable) {
37+
public PaymentV1Dto.TransactionResponse fallback(String userId, PaymentV1Dto.PgPaymentRequest request, Throwable throwable) {
2538
return new PaymentV1Dto.TransactionResponse(
2639
null,
2740
PaymentV1Dto.TransactionStatusResponse.FAILED,
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.loopers.application.payment;
2+
3+
import com.loopers.domain.payment.Payment;
4+
5+
public interface PaymentRepository {
6+
Payment save(Payment payment);
7+
}
Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.loopers.domain.payment;
22

33
import com.loopers.domain.BaseEntity;
4+
import com.loopers.interfaces.api.payment.PaymentV1Dto;
45
import jakarta.persistence.Column;
56
import jakarta.persistence.Entity;
7+
import jakarta.persistence.EnumType;
8+
import jakarta.persistence.Enumerated;
69
import jakarta.persistence.Table;
710
import lombok.AccessLevel;
811
import lombok.Getter;
@@ -13,13 +16,33 @@
1316
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1417
@Table(name = "payment")
1518
public class Payment extends BaseEntity {
16-
@Column(name = "ref_order_id", nullable = false)
17-
private Long orderId;
19+
@Column(name = "ref_user_login_id", nullable = false)
20+
private String userId;
1821

19-
@Column(name = "ref_user_id", nullable = false)
20-
private Long userId;
22+
@Column(name = "order_no", nullable = false, unique = true)
23+
private String orderNo;
2124

22-
@Column(name = "transaction_key")
25+
@Column(name = "transaction_key", nullable = false, unique = true)
2326
private String transactionKey;
2427

28+
@Enumerated(EnumType.STRING)
29+
@Column(name = "status", nullable = false)
30+
private PaymentStatus status;
31+
32+
33+
public Payment(String userId, String orderNo, String transactionKey, PaymentStatus status) {
34+
this.userId = userId;
35+
this.orderNo = orderNo;
36+
this.transactionKey = transactionKey;
37+
this.status = status;
38+
}
39+
40+
public static Payment create(PaymentV1Dto.PaymentRequest request) {
41+
return new Payment(
42+
request.userId(),
43+
request.orderNo(),
44+
request.transactionKey(),
45+
PaymentStatus.PENDING
46+
);
47+
}
2548
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.loopers.domain.payment;
2+
3+
public enum PaymentStatus {
4+
PENDING,
5+
COMPLETED,
6+
FAILED,
7+
CANCELED
8+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.loopers.infrastructure.payment;
2+
3+
import com.loopers.domain.payment.Payment;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface PaymentJpaRepository extends JpaRepository<Payment, Long> {
7+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.loopers.infrastructure.payment;
2+
3+
import com.loopers.application.payment.PaymentRepository;
4+
import com.loopers.domain.payment.Payment;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.stereotype.Component;
7+
8+
@Component
9+
@RequiredArgsConstructor
10+
public class PaymentRepositoryImpl implements PaymentRepository {
11+
private final PaymentJpaRepository paymentJpaRepository;
12+
13+
@Override
14+
public Payment save(Payment payment) {
15+
return paymentJpaRepository.save(payment);
16+
}
17+
}

apps/commerce-api/src/main/java/com/loopers/infrastructure/payment/client/PgClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ public interface PgClient {
1717
@PostMapping("/api/v1/payments")
1818
ApiResponse<PaymentV1Dto.TransactionResponse> requestPayment(
1919
@RequestHeader("X-USER-ID") String userId,
20-
@RequestBody PaymentV1Dto.PaymentRequest request
20+
@RequestBody PaymentV1Dto.PgPaymentRequest request
2121
);
2222
}

0 commit comments

Comments
 (0)