[프로그래머스] Node기반 REST API 구현(1)

Lina Hongbi Ko·2024년 9월 30일
0

Programmers_BootCamp

목록 보기
26/76
post-thumbnail

2024년 9월 30일

✏️ users, books 설계

✏️ 좋아요 설계


: 위 그림에서 member 테이블의 id를 이용해 follow 테이블에서 followng 하는 유저와 followed 하는 유저를 같이 관리해주고 있다.

이처럼, 좋아요도 1:N의 관계로 ERD를 그릴 수 있다.

  • like 테이블은 user 테이블의 id와 book테이블의 id를 넣어(post) 관리해준다.
  • 만약 좋아요를 취소하면 데이터는 사라질 것이다.(delete)
  • 만약 1번 책의 좋아요 갯수가 몇 개 인지 알고 싶다면, likes 테이블에서 liked_book_id = 1인 row들의 갯수를 세면 됨

✏️ 장바구니 설계

  • 장바구니 담기는 bookId와 count만 있으면 되지만, 장바구니 조회는 bookId, count 뿐만 아니라 title, summary, price도 필요하다. 따라서 이를 위해 bookId를 FK로 만들어서 JOIN을 통해 보여준다.

✏️ 주문 예상 상품 목록 조회 설계

  • request body : 장바구니의 cartItemId 데이터를 조회해서 줄 예정

✏️ 주문하기 설계

: 결제하기 = 주문하기 = 주문등록 = 데이터베이스 주문 insert

  • 주문서 작성은 배송 정보, 주문상품 목록, 결제 정보, 총 금액으로 이루어짐

  • 결제(주문) API

    • request body에 주문 상품 목록, 배송 정보, 총 금액을 요청해야함

    • 상품 목록 : 장바구니에서 선택한 주문 예상 상품 목록 조회의 response body 내용을 배열로 보여주면 됨

      • 따라서, 장바구니 id만 배열로 받으면 됨 ⇒ itmes : [cartItemId, cartItemId …] 요청
    • 배송 정보는 사용자 입력해서 {adderss : “주소”, receiver : “이름”, contact: “010-0000-0000”} 요청 ⇒ 이 데이터들이 delivery 테이블로 저장됨

    • 결제 정보 : 일단 보류

    • 총 금액 : {totalPrice: 총 금액} 으로 요청

  • request로 받은 정보들을 order 테이블 안에 다 넣어서 관리해도 되고, devliery & order 테이블롤 나눠서 관리해도 됨

  • orders 테이블 생성

  • 그런데, cartItem_id에 데이터가 배열로 들어가 있다 → 이를 관리해주기 위해 likes 테이블을 생성한 것처럼 다른 하나의 테이블을 생성해준다. 그리고 장바구니는 결제하면 cartItemId가 없어지므로, bookId가 필요하다(책의 이름과 가격이 필요함)

  • 다시 결제(주문)API를 수정해야 한다.
    • 상품 목록을 이제 bookId로 가져올 것인데, cartItems의 bookId도 주문하면 역시 사라지므로 count를 프론트단에서 가져와줘야한다. 또한 주문를 하면 장바구니에서 주문된 상품은 사라져야 하므로(DELETE) cartItems의 cartItemId까지 알아야 삭제할 수 있으므로 cartItemId도 request도 받아야 한다.

  • 테이블 수정
    • 주문을 하면 주문 일자도 넣어야 하므로 created_at 필드도 추가해준다.

    • 그리고 테이블 정리

✏️ 주문 내역 조회 설계

*주문 목록 페이지 : 주문 일자, 배송 정보(주소, 수령인, 전화번호), 상품 정보, 배송 추적(모달을 띄우는 정도로 처리 프론트엔드쪽), 상세 정보(토글 클릭하면 상세 상품 정보 노출) 로 구성됨

  • response body에 orders 테이블을 통해 주문한 내역들을 보여준다.

  • 주문 id와 주문 일자는 orders 테이블에서 가져올 예정

  • 배송 정보 : delivery 테이블의 address, receiver, contact에서 가져올 예정

  • 대표 책 제목, 결제 금액, 총 수량

  • orderBook 테이블의 book_id를 통해 대표 책 제목을 가져오려고 했는데 번거로워서 order테이블에 추가해서 book_title 사용

  • rderBook 테이블의 count를 통해 총 수량을 가져오려고 했는데 번거로워서 order테이블에 total_count 사용

✏️ 주문 상세 조회 설계

: 해당 주문 아이디에 해당된 상품들의 정보를 출력할 예정

ex) 주문 id가 1인 친구를 조회하면 그에 따른 책들을 상세히 보여줄 것임

따라서, orderBook 테이블을 이용할 예정 → order_id에 해당하는 book_id로 도서 제목, 작가 이름, 가격, 수량을 가져오고 count도 가져옴

profile
프론트엔드개발자가 되고 싶어서 열심히 땅굴 파는 자

0개의 댓글