API 구현하기(5): 장바구니 담기, 조회, 삭제
1️⃣ 장바구니 담기
const addToCart = (req,res) => {
const {book_id, quantity, user_id} = req.body;
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);
}
)
}
body 에 입력된 값에 따라 데이터베이스에 해당 데이터가 잘 저장되는 것을 확인할 수 있다.
2️⃣ 장바구니 아이템 목록 조회 / 선택된 장바구니 아이템 목록 조회
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);
}
)
}
✨IN 논리 연산자 사용하기
컬럼명 IN (값1, 값2 ...) 쓰면 컬럼명에서 값 1, 값 2을 만족하는 행을 전부 출력해준다. 쉽게 말해 같은 컬럼에서 OR 연산자가 여러개 필요할 때 IN () 을 사용하면 간단해진다.
위의 경우에서는 장바구니에서 선택된 상품들이 여러개 있을 수 있으므로 IN 연산자를 사용하여 장바구니 안에서 선택된 아이템들이 모두 출력되도록 하였다.
user_id 가 1이고, 장바구니에서 선택된 아이템의 아이디가 1,3 인 경우를 조회하면 위와 같은 결과가 나오게 된다.
3️⃣ 장바구니 도서 삭제
const removeCartItem = (req,res) => {
const {id} = req.params; // cartItemId
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);
}
)
}
URL 에 파라미터로 받은 장바구니 아이템 번호에 해당하는 아이템이 잘 삭제된 것을 확인할 수 있다.
🌟 배운 점
오늘은 데이터베이스 테이블에서 외래키 설정 시 제약 조건의 이름이 중복되지 않아야 한다는 것을 새롭게 배웠다. 외래키 이름을 짓는 좋은 방법은 `fk_기준테이블명_참조테이블명_참조키` 형식이다. 그동안 제약 조건 이름을 무심코 지었는데, 앞으로는 규칙에 따라 더 체계적으로 이름을 정할 계획이다. 또한, SQL 문에서 OR 대신 IN 연산자를 사용하면 쿼리를 간결하게 작성할 수 있다는 것도 새로 알게 되었다. 오늘 배운 것을 잊지 않고 잘 활용해야겠다.
👍🏻참고하기
https://velog.io/@taerin/mysql-errno-121-Duplicate-key-on-write-or-update
🧨 mysql - errno: 121 "Duplicate key on write or update”
문제 발생 상황외래키를 지정해주려고 하니 errno: 121 "Duplicate key on write or update” 에러가 뜸errno: 121 "Duplicate key on write or update”고유 제약 조건을 가진 컬럼에 중복된 값을 삽입하려고 할
velog.io