DB에서 제약조건 이름은 스키마 전체에서 유니크해야 함
[fk 제약조건 이름짓기]
fk_기준 테이블명_참조테이블명_참조키
- cartItems.user_id > users.id : fk_cartItems_users_id
- likes.user_id > users.id : fk_likes_users_id

index
- 스키마 단위로 유니크
- 다른 테이블이라도 같은 이름 사용 ❌

기본 CartController.js
const conn = require('../mariadb'); //db 모듈
const {StatusCodes} = require('http-status-codes'); //status code 모듈
// 장바구니 담기
const addToCart = (req, res) => {
const {book_id, quantity, user_id} = req.body;
const {id} = req.params;
let sql = "INSERT INTO cartItems(book_id, quantity, user_id) VALUES(?, ?, ?);";
let values = [book_id, quantity, user_id];
conn.query(sql, values,
(err, results) => {
if(err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
return res.status(StatusCodes.OK).json(results);
})
}
// 장바구니 아이템 목록 조회
const getCartItems = (req, res) => {
const {user_id} = req.body;
let sql = `SELECT cartItems.id, book_id, title, summary, quantity, price
FROM cartItems LEFT JOIN books
ON cartItems.book_id = books.id
WHERE user_id = ?;`;
conn.query(sql, user_id,
(err, results) => {
if(err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
return res.status(StatusCodes.OK).json(results);
})
}
// 장바구니 아이템 삭제
const removeCartItem = (req, res) => {
const {id} = req.params;
let sql = "DELETE FROM cartItems WHERE id = ?;";
conn.query(sql, id,
(err, results) => {
if(err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
return res.status(StatusCodes.OK).json(results);
})
}
module.exports = {
addToCart,
getCartItems,
removeCartItem
}
구매 예상 장바구니 목록 조회
선택한 아이템에 따른 장바구니 목록 조회
//장바구니에서 선택한(장바구니 도서 id) 아이템 목록 조회 = 선택한 장바구니 상품 목록 조회
SELECT * FROM Bookshop.cartitems WHERE user_id=1 AND id IN(1,3);
컬럼명 IN (값1, 값2, 값3 ...)
→ 해당 컬럼 값이 괄호 안 목록 중 하나라도 일치하면 TRUE
req.body에 배열을 넣고, sql의 ?에 배열의 요소마다 넣어줘야할때
바로 values에 selected을 넣어줘도, 배열의 요소 하나하나에 ?을 알아서 배당해서 넣어줌.
// 장바구니 아이템 목록 조회
const getCartItems = (req, res) => {
const {user_id, selected} = req.body; // selected = [1,3]
let sql = `SELECT cartItems.id, book_id, title, summary, quantity, price
FROM cartItems LEFT JOIN books
ON cartItems.book_id = books.id
WHERE user_id = ? AND cartItems.id IN (?);`;
let values = [user_id, selected];
conn.query(sql, values,
(err, results) => {
if(err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
return res.status(StatusCodes.OK).json(results);
})
}
'Devcourse > BookShop 사이드 프로젝트' 카테고리의 다른 글
| [BookShop 프로젝트] jwt 토큰 추가, jwt 예외처리, try...catch, throw (0) | 2026.03.04 |
|---|---|
| [BookShop 프로젝트] 주문 API - LAST_INSERT_ID(), MAX()로 최신 데이터 가져오기, insertId, 벌크 INSERT (0) | 2026.02.20 |
| [BookShop] 좋아요 API 구현 - count(), EXISTS (0) | 2026.02.18 |
| [BookShop 프로젝트] Books API 구현 - picsum (0) | 2026.02.14 |
| [BookShop 프로젝트] Users API 구현 - http-status-codes 모듈, 컨트롤러, crypto 모듈(비밀번호 암호화) (0) | 2026.02.13 |