ERD 다이어그램 + SQL 문 함께 보기
ERD
users 테이블
Table users{
id integer [primary key]
email varchar
password varchar
}
id | username | password | created_at |
1 | kim | 1111 | |
2 | lee | 2222 | |
3 | park | 3333 | |
4 | chae | 4444 | |
5 | jang | 5555 | |
6 | kang | 6666 | |
7 | song | 7777 |
books 테이블
전체조회 + 개별 조회 + 카테고리
Table books{
id integer [primary key]
title varchar
category varchar
format varchar
isbn varchar
summary text
description text
author varchar
pages integer
index text
price integer
likes integer
pubDate timestamp
}
likes 좋아요 테이블
user_id, liked_book_id
Insert, Delete 사용
좋아요 cnt likes의 liked_book_id를 통해 셀 수 있다.
Table likes{
user_id integer
liked_book_id integer
}
좋아요 추가
Method | POST |
URI | /likes/{bookId} |
HTTP status code | 성공 : 200 실패 : |
Request Body | |
Response Body |
좋아요 취소
Method | DELETE |
URI | /likes/{bookId} |
HTTP status code | 성공 : 200 실패 : |
Request Body | |
Response Body |
DB
user_id | liked_book_id |
1 | 1 |
1 | 5 |
1 | 7 |
3 | 1 |
4 | 5 |
6 | 5 |
장바구니 carts 테이블
장바구니 + books 테이블 `조인`
Table cartItems{
cart_item_id integer [primary key]
book_id integer
cnt integer
}
book_id는 FK로 동작한다
id(PK) | bookId(FK) | cnt |
1 | 1 | 1 |
2 | 3 | 2 |
3 | 2 | 1 |
4 | ||
5 |
주문 예상 상품 목록 조회 테이블
주문 예상 상품 목록 조회! > 장바구니에서 긁어온다.
장바구니에서 주문하기 체크된 상품만 주문할 것 > req.body 값에서 cartItemId를 받아온다.
Method | GET |
URI | / |
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 : 가격 }, … ] |
order 주문 테이블
결제하기 = 주문하기 = 주문 등록 = 데이터베이스 주문 insert = 장바구니에서 주문된 상품은 delete되어야 한다.
상품 목록, 배송정보, 결제 정보, 총금액
Method | POST |
URI | /orders |
HTTP status code | 성공 : 200 실패 : |
Request Body | { items : [{ cartItemId : 장바구니 도서 id, bookId : 도서 id, cnt : 수량 }, { cartItemId : 장바구니 도서 id, bookId : 도서 id, cnt : 수량 },…], delivery : { address : “주소”, receiver : “이름”, contact : “010-0000-0000” } totalPrice : 총 금액 } |
Response Body |
카트의 cnt 값을 프론트에서 저장해서 전달
delivery 테이블
id | address | receiver | contact |
1 | 서울시 중구 | 채다희 | 010-1111-2222 |
2 | |||
3 | |||
4 | |||
5 | |||
6 |
주문 내역 조회
req > 주문일자, 배송정보, 상품정보
Method | GET |
URI | /orders |
HTTP status code | 성공 : 200 실패 : |
Request Body | |
Response Body | [ { order_id : 주문 id, orderDate : “주문일자”, delivery : { address : “주소”, receiver : “이름”, contact : “전화번호” }, bookTitle : “대표 책 제목”, totalPrice : 결제 금액, totalpnt : 총 수령 } ] |
orders 테이블
order_id | delivery_id | total_price | created_at | book_title | total_cnt |
1 | 1 | 2000 | 대표 책 제목 | 3 | |
1 | 3 | 2 | |||
1 | 4 | 1 | |||
2 | |||||
3 | |||||
3 |
주문 상세 상품 정보 조회
Method | GET |
URI | /orders/{orderId}/book_detail |
HTTP status code | 성공 : 200 실패 : |
Request Body | |
Response Body | [ { bookId : 도서 id, bookTitle : “도서 제목”, author : “작가명”, price : 결제 금액, cnt : 총 수령 },{ bookId : 도서 id, bookTitle : “도서 제목”, author : “작가명”, price : 결제 금액, cnt : 총 수령 }, … ] |
orderBook 테이블로 징검다리 생성?
order_id | book_id | cnt |
1 | 2 | 1 |
1 | 3 | 2 |
1 | 4 | 1 |
☑️ 배운 점
주문 order 설계부터 헷갈려서 강의를 두번! 들었다....ㅜ
아마 얕게 반복하는 수업 과정이어서 그런 것 같다.. 한번 깊게 싹 훑어주는 과정도 있으면 좋겠다..
주문 예상 상품 > 장바구니에서 선택된 item 들 > 주문에서 다시 사용할때는 사라진다? 는 설명이 이해가 되지 않았다.