포스트

주문

주문

요구사항

요구사항 더 캐묻기

  • 쿠폰은 여러 개가 사용 가능한건지?
  • 쿠폰 사용 시, 최소 주문 금액이 있는지?
  • 쿠폰이 상품 두 개 다 사용이 가능할 때, 어떤 상품에 적용 가능하게 할 것 인지?
    • 유저가 선택 가능하게 할 것인지?
  • 포인트는 최소 주문 금액이 있는지?
  • 배송이 따로 일 경우 배송비는 어떻게 하는지?
  • 배송 주소는 어디서 입력 받는지?
  • 재고 수량이 부족한 경우 결제 클릭 시, 예외가 발생해야 하는지?
  • 결제 예외가 발생할 시, 어떻게 처리할 지?

구현 시, 고려사항

  • 결제 전, 주문을 만들면 쓰레기 데이터가 될 수 있음
  • 결제 시, 주문을 만들면 결제 로직 중 오류가 발생하면 주문이 휘발 될 수 있음

흐름도

  • 상품이나, 장바구니에서 주문이 가능

주문 흐름을 하나로 만들어 보기

  • 상품 주문 시, 장바구니에 담아서 주문을 만드는 식으로 장바구니를 통해서만 주문 되도록 흐름을 만들 수 있음
  • 반대로, 여러 상품을 주문하는 식으로 만들어 장바구니에 담은 상품을 상품 여러 개로 주문 되도록 흐름을 만들 수 있음
  • 주문이 상품을 의존하느냐, 장바구니를 의존하느냐의 차이

OrderId가 있는데 OrderKey를 별도로 만드는 이유

  • 경쟁사에서 주문 개수를 유추할 수 있음
  • OrderId로 할 시, 해커가 순회하며 주문 요청을 보낼 수도 있음 (유저 정보를 체크하니 상관은 없을 듯)
  • 등등

API

상품 주문

1
POST /v1/orders
Parameter설명
productId상품 고유 아이디
quantity수량
  1. 상품id로 상품 조회
  2. 주문 엔티티 생성 및 저장
  3. 주문 항목 엔티티 생성 및 저장
  4. 주문 키 반환

장바구니에서 주문

1
POST /v1/cart-orders
Parameter설명
cartItemIds장바구니 아이템 고유 아이디 리스트
  1. 장바구니 항목 조회
  2. 파라미터로 전달받은 장바구니 항목만 필터링 해서 주문 생성
  3. 상품 주문 서비스 호출

결제 전 주문 화면

1
GET /v1/orders/{orderKey}/checkout
Path Parameter설명
orderKey주문 키
  1. 주문 키CREATE 상태에 해당하는 주문 조회
  2. 사용 가능한 쿠폰 조회
  3. 포인트 잔액 조회

주문 목록 조회

1
GET /v1/orders
  • 결제 완료주문 목록 조회

주문 상세 조회

1
GET /v1/orders/{orderKey}
Path Parameter설명
orderKey주문 키
  1. 주문 키에 해당하는 주문 조회
  2. 주문에 해당하는 주문 항목 조회

개념도

  • 주문은 상품을 의존
  • 장바구니로 주문 시, 상품을 여러 개 주문하는 식으로 구현하였기에 장바구니가 상품에 의존
  • 상품이 장바구니에 비해 상급 개념이라 상품을 메인으로 놓고 처리한 것

참고

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.