장바구니에 대한 고찰 3 with 재고?

·2022년 4월 18일
0

API 장바구니

목록 보기
1/5

코캠 출원해서 멘토님한테 좀 물어봤는데 오히려 덤이 더 생겼다.

Q. 만약 물건이 다 팔릴 경우에는 보여주는 것이 비활성화 된다거나, 안보이게 해야할 것 같은데 이 상태에서는 안되겠는데요?
A. ?

그래서 테이블을 또 추가했다..^^

고민을 해서 아래와 같은 구조를 만들게 됐다.

물건 상세 테이블이 최초로 생겨나면
그것을 기반으로 물건 테이블이 함께 생성된다

물건 테이블은 상세 테이블에서 참조한 것들로 사용하고 있고
서로 1:1 매칭이기때문에 1:1 구조로 만들어놨다.

그리고 장바구니는 물건 테이블을 참조하고 있다. 근데 저거 N:M인 것 같은데 ERD가 구현을 안해줘서 일단 저렇게 달아놨다.

유저가 장바구니에 물건을 추가를 할 경우

(프론트에서 물건을 추가하면, 상품의 이름과 수량 2개가 넘어온다. 상품의 이름은 유니크 옵션을 가지고 있다.)

new Map()을 사용하여
장바구니 내부의 물품 이름/ 수량 테이블을 확인해서

존재하지 않을 경우 상품 이름에 해당하는 값이 Key가 되고 수량이 Value가 된다.
같은 이름으로 존재할 경우에는 수량만큼 기존의 수량에 갯수가 추가가 된다.

유저가 장바구니에서 물건의 수량을 바꾸거나 지울 경우

그리고 장바구니에서 수량을 내릴 경우에도 마찬가지로
같은 이름으로 존재하는 값을 찾아 깎은 수량만큼 기존 수량에서 내리고
해당하는 상품을 아예 없애버릴 경우 그 상품이름으로 생성되어있는 객체값이 아예 사라진다.

장바구니에서 물건의 정보를 보여주는 경우

배열 객체 속에 해당하는 상품의 이름이 적혀있기 때문에

그것으로 연결되어있는 물건의 테이블을 참조하여 해당하는 값들을 보여주는 방식으로 사용할 것이다.

판매가 될 경우

판매가 될 경우에는 관계가 형성은 안됐지만 물품 상세 DB를 서비스단에 불러와서
판매가 된 수량만큼 재고에서 지우면 될 것 같다.

물론 수량을 바꿀 때 사용하는 업데이트 api와
결제를 성공했을 때 사용하는 업데이트 api는 다르게 된다. (아마 delete를 쓸 것 같긴 하다. 업데이트가 아니라)


근데 여기서 문제가 생겼다.

Mysql이 배열을 제공하지 않는다.....

아오 진짜....

profile
물류 서비스 Backend Software Developer

0개의 댓글