TEAM-LEG3ND / luwak

Backend server for on-demand-cafe project
4 stars 0 forks source link

[BE] 주문 화면 API 설계 #6

Open d0lim opened 8 months ago

d0lim commented 8 months ago

개요

redjen8 commented 8 months ago

매장 목록 가져오기 API

GET /shop/list

responses

Questions

redjen8 commented 8 months ago

선택한 매장의 재료 목록 불러오기

GET /shop/{shopNo}/ingredients

responses

redjen8 commented 8 months ago

~선택한 재료 목록으로 장바구니 담기~

~POST /cart/ingredients~

~request body~

~responses~

~성공 시 204~

장바구니 담기는 FE에서 관리하는 영역으로, BE API를 호출하지 않는 것으로 spec out 처리합니다.

redjen8 commented 8 months ago

주문 -> 장바구니 담기 / 주문 -> 바로 주문하기 시 BE validation

선택한 재료의 조합이 가능한 주문인지 체크 (ex. hot 콜드브루)

POST /shop/{shopNo}/validation

request body

response body

레시피 전부 validation 통과 시, 200 OK

레시피 중 하나라도 validation 통과하지 못했다면, 400 Bad Request

redjen8 commented 8 months ago

주문 플로우 (BE 중심)

luwak_order drawio

d0lim commented 8 months ago

@redjen8 MVP 스펙에서는 현재 위치 기반으로 매장을 조회하는 기능은 제공하지 않습니다. 따라서 매장 정보에서도 Location 관련 정보 (lat, lng)는 제외하고 고려 부탁드립니다.

redjen8 commented 8 months ago

주문 엔티티 설계

redjen8 commented 8 months ago

매장 엔티티 설계

redjen8 commented 8 months ago

재료 엔티티 설계

redjen8 commented 8 months ago

논의 사항

매장 별 재료가 전부 다른지? 예를 들어 같은 재료 (ex. 우유)라면 매장에 관계 없이 동일한 썸네일을 보여줘도 괜찮은지 재료 <-> 매장 간 매핑 정보 저장 방법

1안

postgresql json 타입을 사용하여 매장 엔티티 아래 아래 내용을 저장

{
  "재료id": 수량,
  ... 
}

2안

매장 인벤토리 엔티티 생성하여 관리

매장 인벤토리 엔티티 설계

매장 id + 재료 id로 인덱스 걸고....

d0lim commented 8 months ago

매장 별로 우유는 각자 다른 우유입니다. (우유 브랜드가 차이날 수도 있고, 나중엔 단위 용량이 달라질 수 있기 때문. 이걸 Join Table 로 풀 수도 있겠지만, 이런 구조화는 나중에 진행하는게 좋지 않을까요?)

동시성 값이나, 인덱스로 주요하게 활용될 값들은 json 으로 활용하지 않는 것이 좋아보입니다.

지금으로 봐서는 매장과 재료가 1:N 이기 때문에, 크게 문제는 없을 것 같은데 어떠신가요?


논의 후 수정합니다.

매장에 역정규 데이터가 있어야 재고 관련 조회를 빨리 할수 있는 것으로 이해했습니다. (오랜만에 DB 관련 데이터를 다뤄서 이런 기초적인걸 잊었네요;) 요 부분은 json 칼럼으로 관리하고, 추후 필요하면 NoSQL 활용해보면 좋을 것 같습니다.

redjen8 commented 8 months ago

240121 매장 - 재료 매핑 논의