Skip to content

Commit 46fee74

Browse files
authored
Merge pull request #20 from nayoung238/refactor/optimize-query
Refactor: optimize query
2 parents a20cf90 + 5c34c4a commit 46fee74

File tree

10 files changed

+317
-83
lines changed

10 files changed

+317
-83
lines changed

src/main/java/banking/payment/api/PaymentController.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import banking.auth.entity.UserPrincipal;
44
import banking.payment.dto.request.PaymentRefundRequest;
55
import banking.payment.dto.request.PaymentRequest;
6+
import banking.payment.dto.response.PaymentView;
67
import banking.payment.dto.response.RefundPaymentResponse;
7-
import banking.payment.entity.PaymentView;
88
import banking.payment.service.PaymentService;
99
import io.swagger.v3.oas.annotations.Operation;
1010
import io.swagger.v3.oas.annotations.media.Content;

src/main/java/banking/payment/dto/response/PaymentResponse.java renamed to src/main/java/banking/payment/dto/response/PaymentView.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
@Schema(description = "결제 응답 DTO")
1515
@Builder
16-
public record PaymentResponse (
16+
public record PaymentView (
1717

1818
@Schema(description = "결제 DB PK", example = "1")
1919
Long paymentId,
@@ -24,7 +24,7 @@ public record PaymentResponse (
2424
@Schema(description = "결제하는 계좌 번호", example = "5792214-80232581")
2525
String withdrawalAccountNumber,
2626

27-
@Schema(description = "수취인 이름", example = "홍길동")
27+
@Schema(description = "수취인 이름", example = "jisoo")
2828
String payeeName,
2929

3030
@Schema(description = "결제 금액", example = "50000")
@@ -40,9 +40,9 @@ public record PaymentResponse (
4040
@Schema(description = "결제일", example = "2024.06.11 15:20")
4141
LocalDateTime paidAt
4242
) {
43-
public static PaymentResponse of(Payment payment, PaymentTransferDetailResponse transferResponse,
44-
String withdrawalAccountNumber, String payeeName) {
45-
return PaymentResponse.builder()
43+
public static PaymentView of(Payment payment, PaymentTransferDetailResponse transferResponse,
44+
String withdrawalAccountNumber, String payeeName) {
45+
return PaymentView.builder()
4646
.paymentId(payment.getId())
4747
.paymentStatus(payment.getPaymentStatus())
4848
.withdrawalAccountNumber(withdrawalAccountNumber)

src/main/java/banking/payment/entity/PaymentView.java

-65
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,26 @@
11
package banking.payment.repository;
22

3-
import banking.payment.entity.PaymentView;
4-
import org.springframework.data.jpa.repository.JpaRepository;
3+
import banking.payment.dto.response.PaymentView;
4+
import banking.payment.entity.Payment;
5+
import org.springframework.data.jpa.repository.Query;
6+
import org.springframework.data.repository.CrudRepository;
7+
import org.springframework.data.repository.query.Param;
58

69
import java.util.Optional;
710

8-
public interface PaymentViewRepository extends JpaRepository<PaymentView, Long> {
11+
public interface PaymentViewRepository extends CrudRepository<Payment, Long> {
912

10-
Optional<PaymentView> findByPaymentId(Long paymentId);
13+
@Query(
14+
"SELECT new banking.payment.dto.response.PaymentView (" +
15+
"p.id, p.paymentStatus, " +
16+
"a.accountNumber, " +
17+
"COALESCE(u.name, '탈퇴한 사용자'), " +
18+
"t.amount, t.exchangeRate, t.currency, t.createdAt) " +
19+
"FROM Payment p " +
20+
"INNER JOIN Transfer t ON p.transferId = t.id " +
21+
"INNER JOIN Account a ON t.withdrawalAccountId = a.id " +
22+
"LEFT JOIN User u ON p.payeeId = u.id " +
23+
"WHERE p.id = :paymentId"
24+
)
25+
Optional<PaymentView> findByPaymentId(@Param("paymentId") Long paymentId);
1126
}

src/main/java/banking/payment/service/PaymentService.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
import banking.common.exception.CustomException;
66
import banking.common.exception.ErrorCode;
77
import banking.payment.dto.request.PaymentRefundRequest;
8+
import banking.payment.dto.response.PaymentView;
89
import banking.payment.dto.response.RefundPaymentResponse;
910
import banking.payment.entity.Payment;
10-
import banking.payment.entity.PaymentView;
1111
import banking.payment.enums.PaymentStatus;
1212
import banking.payment.repository.PaymentRepository;
1313
import banking.payment.dto.request.PaymentRequest;

src/main/java/banking/transfer/service/TransferService.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ else if (transfers.get(0).getTransferType().equals(TransferType.DEPOSIT)) {
174174
public Transfer saveWithdrawalTransferDetail(Account withdrawalAccount, AccountPublicInfoResponse depositAccountPublicInfo, BigDecimal exchangeRate, BigDecimal amount) {
175175
Transfer transfer = Transfer.builder()
176176
.transferGroupId(createTransferGroupId(withdrawalAccount.getAccountNumber(), depositAccountPublicInfo.accountNumber()))
177-
.transferOwnerId(withdrawalAccount.getId())
177+
.transferOwnerId(withdrawalAccount.getUser().getId())
178178
.transferType(TransferType.WITHDRAWAL)
179179
.withdrawalAccountId(withdrawalAccount.getId())
180180
.depositAccountId(depositAccountPublicInfo.accountId())

src/test/java/banking/payment/api/PaymentControllerTest.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import banking.common.jwt.TestJwtUtil;
1111
import banking.payment.dto.request.PaymentRefundRequest;
1212
import banking.payment.dto.request.PaymentRequest;
13-
import banking.payment.entity.PaymentView;
13+
import banking.payment.dto.response.PaymentView;
1414
import banking.payment.enums.PaymentStatus;
1515
import banking.payment.service.PaymentService;
1616
import banking.user.entity.Role;
@@ -135,7 +135,7 @@ void refund_succeed_test () {
135135

136136
// given4 - 결제 취소 요청 DTO 생성
137137
PaymentRefundRequest refundRequest = PaymentRefundRequest.builder()
138-
.paymentId(paymentView.getPaymentId())
138+
.paymentId(paymentView.paymentId())
139139
.withdrawalAccountPassword(withdrawalAccount.getPassword())
140140
.build();
141141

@@ -182,7 +182,7 @@ void find_payment_details_test () throws Exception {
182182

183183
// When & Then
184184
mockMvc.perform(
185-
get("/payment/{paymentId}", paymentView.getPaymentId())
185+
get("/payment/{paymentId}", paymentView.paymentId())
186186
.header("Authorization", "Bearer " + TestJwtUtil.generateTestAccessToken(withdrawalAccountUser.getId(), Role.USER))
187187
.contentType(MediaType.APPLICATION_JSON)
188188
)

0 commit comments

Comments
 (0)