프로젝트 1-7 ~ 1-11 (ERD 설계)

Develop Kim·2024년 9월 30일

programmers

목록 보기
20/40

프로젝트: Node.js 기반의 REST API 구현

1 설계를 직접 해보자

1-1 ~ 1-6(API 설계)

1-7 dbdiagram.io & users, books 설계

1️⃣ dbdiagram을 이용해서 ERD를 설계해보자

  • 해당 소프트웨어를 이용해서 ERD를 프로그래밍할 수 있다.
  • API설계대로 users와 books를 만들고 그 요소들을 추가해보면 아래와 같이 만들 수 있다.




1-7 좋아요 ERD, API 설계

1️⃣ 좋아요 ERD 설계

  • 좋아요 ERD를 추가하기 위해 엑셀을 이용해서 데이터베이스를 파악해보자
  • 기존 다이어그램에 있는 맴버와 팔로우의 관계를 먼저 보면 1/N 관계인 것을 알 수 있다. 이를 착안하려 likes를 설계해보자
  • 유저가 좋아요 표시를 하는 likes 테이블을 만들면 해결된다.

  • likes 테이블을 만들면 API설계도 바뀌게 됨 likes는 PUT이 아닌 POST, 좋아요 취소도 PUT이 아닌 DELETE

좋아요 추가 API 설계 변경

  • Method : POST
  • URL : /likes/{bookId}
  • HTTP status code : 성공 200
  • Request Body :
  • Response Body :

좋아요 취소 API 설계 변경

  • Method : DELETE
  • URL : /likes/{bookId}
  • HTTP status code : 성공 200
  • Request Body :
  • Response Body :



1-8 장바구니 API ERD 설계

1️⃣ 장바구니 ERD 설계

  • 장바구니 ERD를 추가하기 위해 엑셀을 이용해서 데이터베이스를 파악해보자
  • 장바구니 데이터 테이블을 만들어보면 장바구니 아이템으로 PK를 만들고 책id를 FK로 불러올 수 있다.



1-9 주문 "예상" 상품 목록 조회 API 수정

1️⃣ 주문 API를 만들어 보자

  • 이전에 만든 주문 API는 사실 주문이 아닌 주문 직전의 주문 예상 페이지임. 결국 이건 장바구니에서 체크한 것만 선별하여 보여주는 것

2️⃣ 주문 예상은 사실 장바구니의 연장선

  • 결국 장바구니 API에 해당하는 것이 타당함 그렇다면 장바구니에서 선정한 것만 req로 받아오면 되는 것
  • req Body에 장바구니에서 어떤 것을 선택했는지 id값을 받아와보자

장바구니에서 선택한 상품목록 조회 API 설계 변경

  • Method : GET
  • URL : /order
  • HTTP status code : 성공 200
  • Request Body :
[cartItemId, cartItemId, ...]
  • Response Body :
[
    {
        cartItemId : 장바구니 도서 id,
        bookId : 도서 id,
        title : "도서 제목",
        summary : "도서 요약",
        count : 수량,
        price : "가격"
    },
    {
        cartItemId : 장바구니 도서 id,
        bookId : 도서 id,
        title : "도서 제목",
        summary : "도서 요약",
        count : 수량,
        price : "가격"
    },
    ...
]



1-10 주문 테이블 설계, API 설계

1️⃣ 주문 테이블 설계

  • 주문자 정보를 작성한 후 주문 상품을 확인하고 결제하기를 누르면 결제하기 API를 요청하도록 만들자

2️⃣ 진짜 주문(결제) API 설계
// 결제하기 = 주문하기 = 주문 등록 = 데이터베이스 주문 insert = 장바구니에서 주문된 상품은 delete

  • Method : POST
  • URL : /orders
  • HTTP status code : 성공 200
  • Request Body :
{
	items : [{
    	cartItemId : 장바구니 도서 id, // 주문된 상품 삭제 위해 추가
		bookId : 도서 id,
        count : 수량
    },
    {
      	cartItemId : 장바구니 도서 id,
		bookId : 도서 id,
        count : 수량
    }]
    delivery : {
    	address : "주소"
        receiver : "이름"
        contact : "010-1234-1234"
    }
    totalPrice : "총 금액" 
}
  • Response Body :

3️⃣ 테이블 설계

  • 상품 목록을 가져오기 위해선 책의 정보가 필요함

  • 주문 목록은 orders 테이블로 만들고 주문하기를 눌렀을 때는 orderedBook으로 만듦



1-11 주문 내역 조회, 주문 상세 조회

1️⃣ 주문 목록페이지는 어떻게 해야 할까?

  • 최종 주문을 확인하는 주문 목록 페이지의 API를 만들어야 함

2️⃣ 주문 목록 조회 API 설계

  • Method : GET
  • URL : /orders
  • HTTP status code : 성공 200
  • Request Body :
  • Response Body :
[
	{
    	order_id : 주문 id,
    	created_at : "주문 일자",
        delivery : {
        	address : "주소",
            receiver : "이름",
            contact : "연락처"
        },
        bookTitle : "대표 책 제목",
        totalPrice : 결제 금액,
        totalCount : 총 수량
    },
...
]

3️⃣ 주문 상세 상품 조회(토글 클릭 시) API 설계
// 어떤 책들이 담겨있는지 조회

  • Method : GET
  • URL : /orders/{orderId}
  • HTTP status code : 성공 200
  • Request Body :
  • Response Body :
[
	{
    	bookId : "도서 id"
        bookTitle : "도서 이름"
        author : "작가명",
        price : 가격,
        count : 수량
    },
    {
    	bookId : "도서 id"
        bookTitle : "도서 이름"
        author : "작가명",
        price : 가격,
        count : 수량
    },
...
]



profile
김개발의 개발여정

0개의 댓글