StockX 사이트는 신발, 옷 등 다양한 패션 아이템을 resell할 수 있는 경매 사이트이다.
StockX에서의 구매와 판매 개념
한 명의 유저가 구매자가 될 수도 있고 판매자가 될 수 있다.
어떤 상품을 특정 가격에 구매하기 원한다면 'bid'를 할 수 있다. 경매에서 입찰한다고 생각하면 된다. 반대로 어떤 상품을 특정 가격에 판매하기 원한다면 'ask'를 할 수 있다.
하지만 나는 'bid'를 하는 게 귀찮고 바로 구매(buy)를 하고 싶다면 lowest ask(=최저 판매입찰가)에 구매할 수 있다. 반대로 'ask'를 하지 않고 바로 판매(sell)를 하고 싶다면 highest bid(=최고 구매입찰가)에 판매할 수 있다.
상품리스트 페이지

- 리스트 페이지에 표시되는 가격은 해당 상품의 lowest ask
(정렬에 따라 달라지기도 한다.)

- size와 color 필터링만 구현
- category 구분하지 않기로 함
상품디테일 페이지

- 하나의 상품에는 여러 사이즈가 있을 수 있음
- 각 사이즈 별로 lowest ask와 highest bid가 있음
구매 및 판매 페이지
Buy or bid 버튼을 누르면

- lowest ask인 $267에 바로 구매(Buy now)할 수도 있고

- $267보다 더 낮은 가격에 bid를 할 수 있음
- expiration date를 설정하고 그 기간 내에 내가 bid한 가격에 판매하려는 판매자가 나타나면 거래가 성사됨

- buy와 bid 모두 shipping information을 입력해줘야 함
- 원래는 결제 정보도 입력해야 하지만 구현하지 않기로 함
마이페이지

- 구매 관련 정보는 buying 탭에서 볼 수 있음
- 내가 bid한 내역은 current에, 매칭이 된 내역은 pending에, 배송까지 완료된 내역은 history에서 볼 수 있음
모델링

- user 관련은 파란색, product 관련은 빨간색, order 관련은 초록색으로 구분
user
- shipping information 테이블을 만들어 이전에 주문한 배송지 내역이 있으면 주소 입력 시 보여주도록 함
- seller level에 따라 판매 수수료 등이 변동됨.
product
- 하나의 product는 여러 size를 가질 수 있으므로 product size 테이블을 만들어 관리
order
- bid 테이블과 ask 테이블을 만들어 관리.
- 매칭이 되지 않은 bid와 ask의 order_status는 'current'
- 매칭이 됐을 경우 order_number, total price, matched_at에 값이 입력되고, order_status는 'pending'으로 업데이트. 또한 중간 테이블 역할을 하는 order에 매칭된 ask와 bid의 관계 정보를 생성함