회원 API
1. 회원가입
| Method | POST |
| URI | /join |
| HTTP status code | 성공 201 |
| Request Body | { email: ‘사용자가 입력 이메일’, password: ‘사용자가 입력 비밀번호’ } |
| Response Body |
2. 로그인
| Method | POST |
| URI | /login |
| HTTP status code | 성공 200 |
| Request Body | { email: ‘사용자가 입력 이메일’, password: ‘사용자가 입력 비밀번호’ } |
| Response Body | JWT Token |
3. 비밀번호 초기화 요청
| Method | POST |
| URI | /reset |
| HTTP status code | 성공 200 |
| Request Body | { email: ‘사용자가 입력 이메일’, } |
| Response Body |
4. 비밀번호 초기화 (=수정)
| Method | PUT |
| URI | /reset |
| HTTP status code | 성공 200 |
| Request Body | { password: ‘사용자가 입력 비밀번호’ } |
| Response Body |
[DB 회원 테이블 구조]
- db diagram 활용 : https://dbdiagram.io/
dbdiagram.io - Database Relationship Diagrams Design Tool
dbdiagram.io
// 회원
Table users {
id integer [primary key]
email varchar
password varchar
}
도서 API
1. 전체 도서 조회
- 추가 고려 사항 : 이미지 경로, 8개씩 보내줘야함
| Method | GET |
| URI | /books |
| HTTP status code | 성공 200 |
| Request Body | |
| Response Body | [ { id : 도서 id, title: ‘도서 제목’, summary: ‘요약 설명’, author: ‘도서 작가’, price: ‘가격’, likes: ‘좋아요 수’, pubDate: ‘출간일’, }, { id : 도서 id, title: ‘도서 제목’, summary: ‘요약 설명’, author: ‘도서 작가’, price: ‘가격’, likes: ‘좋아요 수’, pubDate: ‘출간일’, }, ... ] |
2. 개별 도서 조회
- 추가 고려 사항 : 이미지 경로
| Method | GET |
| URI | /books/{bookid} |
| HTTP status code | 성공 200 |
| Request Body | |
| Response Body | { id : 도서 id, title: ‘도서 제목’, category: ‘카테고리’, format: ‘포맷’, isbn: ‘isbn’, summary: ‘요약 설명’, description: ‘상세 설명’, author: ‘도서 작가’, pages: ‘쪽 수’, index: ‘목차’, price: ‘가격’, likes: ‘좋아요 수’, liked: boolean, pubDate: ‘출간일’, } |
3. 카테고리별 도서 목록 조회
- new : true => 신간 조회(기준 : 출간일 30일 이내)
- 추가 고려 사항 : 이미지 경로, 8개씩 보내줘야함
카테고리 id 어떻게 알고 보내줄까?
| Method | GET |
| URI | /books?categoryId={categoryId}&new={boolean} |
| HTTP status code | 성공 200 |
| Request Body | |
| Response Body | [ { id : 도서 id, title: ‘도서 제목’, summary: ‘요약 설명’, author: ‘도서 작가’, price: ‘가격’, likes: ‘좋아요 수’, pubDate: ‘출간일’, }, { id : 도서 id, title: ‘도서 제목’, summary: ‘요약 설명’, author: ‘도서 작가’, price: ‘가격’, likes: ‘좋아요 수’, pubDate: ‘출간일’, }, ... ] |
[DB 도서 테이블 구조]
// 도서
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
}
좋아요 API
1. 좋아요 추가
| Method | POST |
| URI | /likes/{bookId} |
| HTTP status code | 성공 200 |
| Request Body | |
| Response Body |
2. 좋아요 취소
| Method | DELETE |
| URI | /likes/{bookId} |
| HTTP status code | 성공 200 |
| Request Body | |
| Response Body |
[DB 좋아요 테이블 구조]
- 좋아요 테이블을 별도 분리해 회원이 좋아요를 누르면 해당 회원id에 좋아요 누른 book_id가 매핑되어 데이터 생성 즉, insert되는 구조로 만든다.
- 좋아요 취소 시 해당 테이블의 데이터를 delete한다.
// 좋아요
Table likes {
user_id integer
liked_book_id integer
created_at timestamp
}
장바구니 API
1. 장바구니 담기
| Method | POST |
| URI | /cart |
| HTTP status code | 성공 201 |
| Request Body | { id : 도서 id, count: 수량, } |
| Response Body |
2. 장바구니 조회
| Method | GET |
| URI | /cart |
| HTTP status code | 성공 200 |
| Request Body | |
| Response Body | [ { cartItemId: 장바구니 도서 id, id : 도서 id, title: ‘도서 제목’, summary: ‘요약 설명’, price: ‘가격’, count: 수량, }, { cartItemId: 장바구니 도서 id, id : 도서 id, title: ‘도서 제목’, summary: ‘요약 설명’, price: ‘가격’, count: 수량, }, ... ] |
3. 장바구니 도서 삭제
| Method | DELETE |
| URI | /cart/{bookId} |
| HTTP status code | 성공 200 |
| Request Body | |
| Response Body |
4. 장바구니에서 선택한 주문 예상 상품 목록 조회
| Method | GET |
| URI | / |
| HTTP status code | 성공 200 |
| Request Body | [cartItemId, cartItemId, ...] |
| Response Body | [ { cartItemId: 장바구니 도서 id, id : 도서 id, title: ‘도서 제목’, summary: ‘요약 설명’, price: ‘가격’, count: 수량, }, { cartItemId: 장바구니 도서 id, id : 도서 id, title: ‘도서 제목’, summary: ‘요약 설명’, price: ‘가격’, count: 수량, }, ... ] |
[DB 장바구니 테이블 구조]
- 장바구니 테이블은 주문하는 책과 수량을 세트로 묶어 cart_item_id로 번호를 매긴 데이터 모음이라고 보면 된다.
- 장바구니에서 선택한 주문 예상 상품을 보려면 요청 바디에 [cartItemId, cartItemId, ...] 배열을 보내준다.
// 장바구니
Table cart_items {
cart_item_id integer [primary key]
book_id integer
count integer
}
주문(결제) API
1. 결제/주문하기 insert
- 추가 고려사항 : 결제와 동시에 장바구니에서 주문된 상품은 delete 하기
- 장바구니에서 선택한 주문예상목록을 item으로 받아 요청바디에서 보내주고, 배송정보(delivery), totalPrice를 함께 보내준다.
| Method | POST |
| URI | /orders |
| HTTP status code | 성공 201 |
| Request Body | { //상품목록 items : [{ cartItemId: 장바구니 도서 id, bookId : 도서 id, count : 수량 }, { cartItemId: 장바구니 도서 id, bookId : 도서 id, count : 수량 }], //배송정보 delivery : { address : “주소”, receiver : “이름”, contact : “010-0000-0000” } //총금액 totalPrice: 총 금액 } |
| Response Body |
2. 주문 목록(내역) 조회
- 요청 바디로 JWT(토큰) 보내주면 주문 내역을 배열로 받는다.
| Method | GET |
| URI | /orders |
| HTTP status code | 성공 200 |
| Request Body | 토큰 |
| Response Body | [ { order_id : 주문 id, created_at : “주문일자”, delivery : { address : “주소”, receiver : “이름”, contact : “전화번호” }, repBookTitle : “대표 책 제목”, totalPrice : 결제 금액, totalCount : 총 수량 } ] |
3. 주문 상세 상품 조회
- order_id를 uri로 받아 orderedBook 테이블에 book_id 배열 가져와 책 정보를 응답해준다.
| Method | GET |
| URI | /orders/{order_id} |
| HTTP status code | 성공 200 |
| Request Body | |
| Response Body | [ { bookId : 도서 id, bookTitle : “도서 제목”, author : “작가명”, price : 가격, count : 수량 }, { bookId : 도서 id, bookTitle : “도서 제목”, author : “작가명”, price : 가격, count : 수량 }, ] |
[DB 배송정보, 주문한책, 주문내역 테이블 구조]
- 배송정보 테이블을 별도 분리하여 일단 입력창에서 받는 값을 저장하기로 결정함
- 주문 상세 상품 조회를 위해서 주문한책 정보를 저장하는 테이블 orderedBook 별도 분리
// 배송정보
Table delevery {
id integer [primary key]
address varchar
receiver varchar
contact varchar
}
// 주문한 책
Table orderedBook {
order_id integer [primary key]
book_id integer
count integer
}
// 주문내역
Table orders {
order_id integer [primary key]
delivery_id integer
total_price integer
total_count integer
rep_book_title varchar
created_at timestamp
}
'프로젝트 > 도서구매사이트' 카테고리의 다른 글
| 1022 좋아요 API 구현 / 좋아요 개수 출력 - COUNT(), AS, 서브쿼리 (0) | 2025.10.21 |
|---|---|
| 1021 SQL 시간 범위 구하기(신간 안내), 도서 목록 페이지 구현 (0) | 2025.10.20 |
| 1020 도서, 카테고리 API 구현 (0) | 2025.10.17 |
| 1017 회원 API 구현 - 컨트롤러 분리, 비밀번호 암호화/복호화 (0) | 2025.10.16 |
| 1016 도서 구매 사이트 프로젝트 셋팅 시작 (0) | 2025.10.16 |