Spring boot kim's Shop/리팩토링

Springboot 예약+결제시스템 리펙토링!

디비드킴 2021. 9. 2. 12:18

1. 아임 포트에서 가상계좌 테스트를 지원한다
2. 부트 페이는 이제 없어도 된다
3. 구조변경이 불가피 해졌다

abstract클래스

paymentabstract.java

이클래스는
결제 검증이 끝나고 예약 dto에게 전달해줄
변수들을 들고 있다

nomalPaymenrtClazz

nomalpayment.java

추상 클래스를 상속받아
일반 결제 결제 검증 후-> paidproduct테이블에 insert 할 때
사용된다
현재는 paymethod하나이지만 나중에 더 많아질 때를 대비해 만들어 놓았다

vbankpaymentclazz

vbankpayment.java

가상계좌 요청 시 사용되는 클래스이다
역시 추상 클래스의 상속 후 사용한다
vbank테이블에 insert 할 때 사용된다

reservationService

reservationService.java

흐름도 바뀌었다
결제 검증 우선 후
paymentabstract paymentabstract=iamportService.confrimPayment(reservationInsertDto.getPaymentId(), totalPrice,kind);
reservationDto에게 부여
reservationInsertDto.setStatus(paymentabstract.getStatus());
reservationInsertDto.setUsedKind(paymentabstract.getUsedKind());
reservationInsertDto.setEmail(paymentabstract.getEmail());
reservationInsertDto.setName(paymentabstract.getName());
예약조건 검사
confrimInsert(reservationInsertDto);
예약 시도
insertReservation(reservationInsertDto);

confrimInsert

reservationService.java

for문 속도 개선
for(int i:times)
. size() 보다 이렇게 이방식을 뭐라고 하던데
어쨌든 이방식이 더 빠르다고 한다
. size()가 매번 호출되지 않으니

불필요한 try/catch제거
놀랍게도 여기서 예외를 발생시키면
confrimContents에 가서 예외가 잡힌다
즉 try/catch는 젤의 함수에 한 번만 감아놔도 된다

가상계좌 발급 시 기간이 맞는지 확인
if(reservationInsertDto.getStatus().equals("ready"))
오늘 날짜와 비교해서 가상계좌 예약요청이
3일 이하 라면(내 가정한 기한이고 사이트마다 다르게 하면 된다)
당일인 경우 만 검증해주자
ex2021-09-02 12:00:00이라면
가상계좌는 2021-09-02 11:00:00시까지 입금되게 기한을 해줘야 한다
근데 11:30:00이나 한 시간 텀이 안될 때 가상계좌 예약을 시도한다면 실패해주자

priceService

priceService.java

삼품 선택시 선택한상품*개수
그리고 재고검사를 행해주는 서비스이다

iamportService

iamportService.java

인터페이스를 변수로 받지 않는다
이전의 paymentService의 interface 만들어주던 함수도 삭제되었다

confrimBuy

iamportService.java

일반 결제만 설명하겠다
가상계좌 파트는 아직 글을 안 썼다

결제 총량이 맞다면
if(totalPrice==amount)
로그인한 정보를 꺼내서
userDto userDto=userService.sendUserDto()
테이블에 저장할 수 있게던저 주자
paymentService.insertPayment(nomalPayment, userDto, totalPrice);
그리고 예약을 완료할 수 있게
paymentabstract=nomalPayment;
추상 클래스에게 부여해준다

이제 가상계좌는 어떻게 움직이는지 가보자!