Skip to content

Commit

Permalink
[JT-61] 결제 내역 조회 기능 추가 전 리팩터링
Browse files Browse the repository at this point in the history
[JT-61] 결제 내역 조회 기능 추가 전 리팩터링
  • Loading branch information
hongdosan committed Sep 13, 2023
2 parents 5a9078a + c2ebf00 commit a4d3437
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,9 @@

import org.springframework.stereotype.Service;

import com.devtoon.jtoon.global.common.MemberThreadLocal;
import com.devtoon.jtoon.member.entity.Member;
import com.devtoon.jtoon.payment.request.PaymentReq;
import com.devtoon.jtoon.payment.service.IamportService;
import com.devtoon.jtoon.payment.service.PaymentInfoService;
import com.devtoon.jtoon.payment.service.PaymentInfoDomainService;
import com.siot.IamportRestClient.exception.IamportResponseException;

import lombok.RequiredArgsConstructor;
Expand All @@ -18,13 +16,12 @@
@RequiredArgsConstructor
public class PaymentApplicationService {

private final PaymentInfoService paymentInfoService;
private final IamportService iamportService;
private final PaymentInfoDomainService paymentInfoDomainService;

public BigDecimal validatePayment(PaymentReq paymentReq) throws IamportResponseException, IOException {
Member member = MemberThreadLocal.getMember();
iamportService.validateIamport(paymentReq);

return paymentInfoService.createPayment(paymentReq, member);
return paymentInfoDomainService.createPayment(paymentReq);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.devtoon.jtoon.payment.service;

import java.io.IOException;
import java.math.BigDecimal;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
Expand All @@ -20,32 +21,34 @@
public class IamportService {

private final IamportClient iamportClient;
private final PaymentInfoService paymentInfoService;
private final PaymentInfoDomainService paymentInfoDomainService;

public IamportService(
@Value("${pg.kg-inicis.rest-api-key}") String restApiKey,
@Value("${pg.kg-inicis.rest-api-secret}") String restSecretKey,
PaymentInfoService paymentInfoService
PaymentInfoDomainService paymentInfoDomainService
) {
this.iamportClient = new IamportClient(restApiKey, restSecretKey);
this.paymentInfoService = paymentInfoService;
this.paymentInfoDomainService = paymentInfoDomainService;
}

public IamportResponse<Payment> cancelPayment(CancelReq cancelReq)
throws IamportResponseException, IOException {
IamportResponse<Payment> irsp = iamportClient.paymentByImpUid(cancelReq.impUid());
paymentInfoService.validateAmount(irsp, cancelReq.checksum());
BigDecimal realAmount = irsp.getResponse().getAmount();
paymentInfoDomainService.validateAmount(realAmount, cancelReq.checksum());
CancelData cancelData = cancelReq.toCancelData(irsp);

return iamportClient.cancelPaymentByImpUid(cancelData);
}

public void validateIamport(PaymentReq paymentReq) throws IamportResponseException, IOException {
IamportResponse<Payment> irsp = iamportClient.paymentByImpUid(paymentReq.impUid());
BigDecimal realAmount = irsp.getResponse().getAmount();
CookieItem cookieItem = CookieItem.from(paymentReq.cookieItem());
paymentInfoService.validateAmount(irsp, cookieItem.getAmount());
paymentInfoService.validateAmount(irsp, paymentReq.amount());
paymentInfoService.validateImpUid(paymentReq);
paymentInfoService.validateMerchantUid(paymentReq);
paymentInfoDomainService.validateAmount(realAmount, cookieItem.getAmount());
paymentInfoDomainService.validateAmount(realAmount, paymentReq.amount());
paymentInfoDomainService.validateImpUid(paymentReq);
paymentInfoDomainService.validateMerchantUid(paymentReq);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,28 @@
import com.devtoon.jtoon.error.exception.DuplicatedException;
import com.devtoon.jtoon.error.exception.InvalidRequestException;
import com.devtoon.jtoon.error.model.ErrorStatus;
import com.devtoon.jtoon.global.common.MemberThreadLocal;
import com.devtoon.jtoon.member.entity.Member;
import com.devtoon.jtoon.member.entity.MemberCookie;
import com.devtoon.jtoon.payment.entity.CookieItem;
import com.devtoon.jtoon.payment.entity.PaymentInfo;
import com.devtoon.jtoon.payment.repository.MemberCookieRepository;
import com.devtoon.jtoon.payment.repository.PaymentInfoRepository;
import com.devtoon.jtoon.payment.request.PaymentReq;
import com.siot.IamportRestClient.response.IamportResponse;
import com.siot.IamportRestClient.response.Payment;

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class PaymentInfoService {
public class PaymentInfoDomainService {

private final PaymentInfoRepository paymentInfoRepository;
private final MemberCookieRepository memberCookieRepository;

@Transactional
public BigDecimal createPayment(PaymentReq paymentReq, Member member) {
public BigDecimal createPayment(PaymentReq paymentReq) {
Member member = MemberThreadLocal.getMember();
PaymentInfo paymentInfo = paymentReq.toEntity(member);
CookieItem cookieItem = CookieItem.from(paymentReq.cookieItem());
MemberCookie memberCookie = MemberCookie.create(cookieItem.getCount(), member);
Expand All @@ -39,9 +39,7 @@ public BigDecimal createPayment(PaymentReq paymentReq, Member member) {
return paymentInfo.getAmount();
}

public void validateAmount(IamportResponse<Payment> iamportResponse, BigDecimal amount) {
BigDecimal realAmount = iamportResponse.getResponse().getAmount();

public void validateAmount(BigDecimal realAmount, BigDecimal amount) {
if (!realAmount.equals(amount)) {
throw new InvalidRequestException(ErrorStatus.PAYMENT_AMOUNT_INVALID);
}
Expand Down

0 comments on commit a4d3437

Please sign in to comment.