장바구니 화면
이해하기
장바구니 화면을 소개합니다.

🅐 장바구니 리스트

장바구니 목록 정보를 조회하여, 해당 금액을 합산해 화면에 노출합니다.
장바구니에 담긴 상품의 정보는 장바구니에 추가된 시점이 아닌, 현재 시점 정보 기준으로 출력 됩니다.
로그인 여부에 따라 회원과 비회원의 장바구니 목록을 조회하는 API가 상이하나, 응답 값 (Responses) 형식은 동일합니다.
- get장바구니 목록 조회
- /cart
로그인 회원의 장바구니 목록을 조회합니다.
회원의 장바구니 목록 내 상품 정보와 합배송 상품의 합산 금액 정보를 조회합니다.
- deliveryGroups
- 실제 구매 가능한 장바구니 목록입니다.
- 장바구니 관련 아래 소개 드릴 API에서 파라미터로 자주 활용되는 cartNo (장바구니 번호)의 경우, 스키마 내 orderProductOptions에서 상품 옵션 별로 확인 가능합니다.
- 동일 배송지별 합배송을 하기 위해서, 배송지 그룹 deliveryGroups > 주문 상품 orderProducts > 주문 상품 옵션 orderProductOptions 기준으로 매핑되어 3depth 배열로 응답 값이 나열됩니다.
- '옵션'과 '텍스트 옵션'이 모두 동일한 상품일 경우, orderProductOptions에서 optionNo와 optionInputs 값을 비교하여 '중복 상품' 이라는 안내 라벨을 화면에 노출합니다.
- price
- 장바구니 가격 정보입니다.
- 실제 구매 가능한 장바구니 리스트 deliveryGroups 를 모두 합산한 가격을 노출합니다. (총 합계 금액 = 총 상품금액 - 총 할인금액 + 총 배송비)
- 배송비 : 만약 합배송이라서 동일한 배송비가 묶여서 적용되는 경우 열을 병합하여 배송비를 표기합니다.
묶음 기준은 (1) 어드민 [설정 > 배송정책 > 배송비관리] 의 배송비 템플릿 (2)묶음 배송 불가 상품입니다.
- 예상 적립금 : accumulationAmtWhenBuyConfirm 을 호출하여 노출할 수 있으며, (판매가-즉시할인금액±옵션가)*수량으로 계산됩니다.
(단, 어드민 [회원 > 적립금 설정 관리]에서 '구매 적립금 기준 금액'에 따라 선택되지 않은 금액은 계산 시 제외됩니다.) - invalidProducts
- 장바구니에 추가한 상품 중, 구매 불가능한 장바구니 리스트 입니다.
- 구매 불가능한 상품 invalidProducts > 주문 상품 옵션 orderProductOptions 기준으로 맵핑(mapping) 되어 2-depth 배열로 응답 데이터가 나열됩니다.
- invalidProducts인 경우 아래와 같이 '구매 제한 상품' 처리하여 화면에 노출하며, 하단 합산 가격에서는 해당 가격을 제외합니다.
- post비회원 장바구니 목록 조회
- /guest/cart
로그인하지 않은 비회원의 장바구니 목록을 조회합니다.
로그인하지 않은 비회원의 장바구니 금액 및 합배송 상품을 계산하여 장바구니 목록을 조회합니다.
기존에 상품 상세페이지 화면이나 메인페이지 섹션영역에서 장바구니 버튼을 통해
localStorage 내 저장했던, 비회원 장바구니 데이터를 request body에 입력하여 호출합니다.
위 GET /cart와 리턴 값 (Responses ) 형식이 deliveryGroups, price, invalidProducts으로 동일하므로, 비회원도 회원과 동일한 장바구니 화면을 노출할 수 있습니다.
비회원의 경우, 장바구니 데이터를 샵바이 DB서버에 따로 저장하지 않고 localStorage에 저장하므로
아래 문서의 ㉡장바구니 옵션 /수량 변경과 ㉢장바구니 삭제 , 🅑 금액 정보에 대한 API가 별도로 존재하지 않고
모두 해당 POST /guest/cart 를 호출하여 조회/수정/계산합니다.
장바구니 화면 내에서 상품의 옵션 및 수량 변경이 가능합니다.
상품 이미지 하단에 [옵션/수량 변경]버튼이 출력 되며, 클릭 시 옵션 별로 옵션 및 수량 정보를 수정 가능합니다.
구매 불가 상품의 경우 해당 버튼이 노출되지 않습니다.

상품을 구매하는 기준은 '상품 단위'가 아니라 '옵션 단위'입니다.
앞서 상품 상세화면에서 소개했던 GET /products/{productNo}/options 를 호출하여
해당 상품의 모든 옵션 정보를 불러와서 select-box 구현합니다,
- get상품 옵션 조회
- /products/{productNo}/options
해당 상품번호(productNo)에 대한 옵션 정보를 조회합니다.
장바구니에서 상품의 '옵션을 변경'한다는 것은, 기존 항목을 삭제하고 새로운 항목을 추가하는 프로세스입니다.
따라서 (2-1)옵션 변경이 포함된 경우와 (2-2) 옵션을 변경하지 않고 수량만 변경하는 경우에 각각 호출하는 API가 상이합니다.
'변경 완료'버튼 클릭 시, 아래 2가지 API를 호출하여
DELETE /cart로 기존 장바구니 옵션을 삭제하고 POST /cart로 새로운 장바구니 옵션을 등록합니다.
- delete장바구니 삭제
- /cart
로그인 회원의 장바구니를 삭제합니다.
- post장바구니 등록
- /cart
로그인 회원의 장바구니 구매 수량과 옵션을 등록합니다.
Request Body OptionInputs 을 통해 텍스트 옵션도 수정 가능합니다.
아래 API를 호출합니다.
- put장바구니 수량 수정
- /cart
로그인 회원의 장바구니 구매 수량을 수정합니다.
㉠ 장바구니 리스트를 다시 호출하여 화면에 노출합니다.
장바구니 리스트에서 특정 상품만 선택하여 삭제할 수 있습니다.

- delete장바구니 삭제
- /cart
로그인 회원의 장바구니를 삭제합니다.
🅑 금액 정보

장바구니 리스트에서 좌측 체크박스에 '체크 된 항목이 변경될 때마다' 실시간으로 금액 정보를 계산합니다.
주문 금액을 계산하는 로직은 아래 GET /cart/calculate 단일 API만을 사용하시길 바랍니다.
- get장바구니 선택 계산
- /cart/calculate
장바구니에서 선택된 상품(cartNo) 금액을 계산합니다.
선택한 상품의 가격 정보를 포함하여, 예상 적립금도 함께 계산하여 노출됩니다.
cartNo은 GET /cart API 내 상품 옵션 별로 orderProductOptions에서 확인 가능합니다.
🅒 주문 버튼

화면 하단의 '선택 상품 주문' 또는 '전체 상품 주문' 버튼 클릭 시, 선택한 상품 옵션에 대한 주문서를 생성합니다.
- post주문서 생성 요청
- /order-sheets
선택한 상품의 옵션에 대한 주문서를 생성합니다.
주문서를 생성하는 API로 , 주문서 화면으로 이동하기 전 단계에서 호출해야 합니다.
해당 API에서 응답 값으로 획득한 주문서 번호 orderSheetNo를 주문서 화면으로 전달합니다.
비회원 주문인 경우 accessToken을 null로 보냅니다.

