- 클라이언트는 주문 서버에 주문 요청
- 주문 서버는 클라이언트 요청의 유효성을 검사
PENDING_ORDER
상태의 유형제품을 선택- 유형제품의 상태를
PROCESSING
로 변경 - 주문에 유형 제품을 추가
- 만약 주문 요청한 수량만큼
PENDING_ORDER
상태의 유형제품이 없다면,재고가 부족합니다.
문구를 클라이언트에게 응답
- 주문 서버가 결제 서버에 결제 요청
- 결제 서버가 결제 요청 받았다고 응답
- 주문 서버는 결제 요청이 들어간 것을 클라이언트에게 전달
- 결제 서버가 결제 결과를 주문 서버에 전달
- 결제가 정상적으로 완료되면,
- 유형제품의 상태를
SHIPPING
으로 변경 - 핵심제품의 재고를 차감
- 유형제품의 상태를
- 결제가 실패되면,
- 재고 유지
- 주문의 유형제품 상태를
PENDING_ORDER
로 변경
- 결제가 정상적으로 완료되면,
- 주문 서버는 받는 결과를 클라이언트에게 전달
{
"core_products" : {
"1" : "30",
"2" : "10"
},
"client_type" : "InexperiencedCustomer",
"payment_method" : "CREDIT_CARD"
}
{
"buyer": {
"name": "John Doe",
"email": "[email protected]"
},
"seller": {
"name": "Jane Doe",
"email": "[email protected]"
},
"payment": "CREDIT_CARD",
"price": 100,
"redirect": "http://localhost:8080/payment/confirm"
}
PENDING_ORDER
: 유형제품이 주문에 포함되지 않는 기본적인 상태를 의미. 여러 주문에서 동시에 접근하면 한 주문에만 들어간다.
PROCESSING
: 유형제품이 주문에 포함되며, 결제 결과를 기다리는 상태를 의미.
SHIPPING
: 결제가 정상적으로 종료되고, 해당 유형제품이 온전히 고객의 소유가 되는 상태.
DELIVERED
: 상품이 고객에게 배송 완료된 상태. 현재 프로젝트에서는 배송까지는 관심사가 아니기 때문에 사용하지 않는다.
- 핵심제품 id가 존재하는가?
- 핵심제품의 재고가 충분한가?
-
PENDING_ORDER
상태의 유형제품이 충분한가? - 클라이언트가 상품 구매 권한이 있는가?
- 결제 방식이 유효한 방식인가?
Transaction 1
- 사용자 권한 확인
- 재고 확인
- 주문 생성
- 상품을 결제 중으로 상태 변환
Transaction 2
- 결제 결과가 성공일 때,
- 상품 상태를 SHIPMENT 로 변경
- 주문의 상태를 FINISH 로 변경
- 에러가 발생하거나, 결제가 실패했을 때,
- 상품의 상태를 PENDING_ORDER 으로 변경
- 상품 재고를 원복
- 주문의 상태를 FAIL 로 변경
Transaction 3
- 리디렉션 정보에 따라 주문을 읽기