Spring boot kim's cafe/예약시스템

Springboot 결제+예약(2) 부분취소/환불 하기 with 아임포트

디비드킴 2021. 7. 9. 14:14

예약 취소는 db에 있는 imp_uid를 사용하면 된다

 

예약을 했다면

imp_uid도 같이 들어가 있다

이제 삭제 로직을 만들건대

개별 취소가 가능해야 하기 때문에

가격이 들어올 수 있게 코드를 바꾸자

 

restcontroller

restcontroller.java

reservationdto.setPrice(seatInforVo.getPrice());

dto에 넣어주고 

 

vo

reservationvo.java

@Column(name = "price",nullable = false)

private int price;

this.price=reservationdto.getPrice();

추가해주면 테이블이 바뀌고

save 할 때 자동으로 들어간다

service는 바꿀 필요가 없다 

 

이제 환불을 구현해보자

service

reservationservice.java

 

검증을 해준다

존재하는 예약인지 올바른 예약인지

그리고 맞다면 객체를 주고 아니라면 null을 준다

 

환불 로직은 이전에 구현했다

https://cordingmonster.tistory.com/78

 

Springboot 결제시스템 만들기!(3) 결제취소 with 아임포트,HttpEntity,RestTemplate,HttpHeaders,Json

토큰을 발급받고 나니까 얼추 적응을 했는지 또 금방 환불을 구현했다 어떻게 api와 통신하는지 감을 좀 잡은 거 같다 service 헤더에는 토큰을 넣어주고 바디에는 결제 id를 넣어준다 그다음 주소

cordingmonster.tistory.com

하지만 여기서 끝이 아니라

이전 로직을 조금 바꿔줘야 한다

예를 들어 a-1 좌석 10/12시를 예약했는데 

둘 중 하나만 취소된다면 

1000원 중 500원만 환불될 수 있게!

 

service

iamportservice.java

if(returnPrice!=0){

body.put("amount", returnPrice);

}

로 판단해서 금액이 있다면

일부 환불이기 때문에 

api에게 바디를 추가해서 

던 저주자!

 

service

reservationservice.java

iamportservice.cancleBuy(reservationvo.getImp_uid(),reservationvo.getPrice());

reservationdao.deleteById(rid);

historyservice.deleteHistory(rid);

세줄이 환불/db삭제를 해준다

 

restcontroller

restcontroller.java

 

js

js

 

결과

예약

개별 취소를 해보자

부분 취소가 완료되었다!

 

솔직히 조금 당황했었다

여러 개 중 한 개만 예약을

취소하는 경우를 생각을 못했었다

제일 무서운 순간이다 어 코드 다 갈아야 하나..?

근데 생각해보면 db자체에 문제가 있어서

db에 금액만 추가하면 되는 문제였다

 

한 번 더 취소하겠다

성공!

이제 예약 변경을 만들어야 한다!