티스토리 뷰
1. 좋아요 기능 구현
(1) 좋아요 추가 기능
사용자가 특정 도서를 좋아요할 때 likes 테이블에 해당 데이터를 추가해야 한다.
📌 SQL 및 코드 구현
const addLike = (req, res) => {
const { userId, likedBookId } = req.body;
const sql = `INSERT INTO likes (user_id, liked_book_id) VALUES (?, ?);`;
const values = [userId, likedBookId];
conn.query(sql, values, (err, results) => {
if (err) {
return res.status(StatusCodes.BAD_REQUEST).json({
msg: `Error: ${err.code}`,
});
}
return res.status(StatusCodes.CREATED).json(results);
});
};
- INSERT INTO likes (user_id, liked_book_id)을 사용하여 특정 사용자의 좋아요를 저장한다.
- userId와 likedBookId를 받아서 likes 테이블에 추가한다.
(2) 좋아요 삭제 기능
사용자가 "좋아요"를 취소할 경우 테이블에서 해당 데이터를 삭제해야 한다.
📌 SQL 및 코드 구현
const removeLike = (req, res) => {
const { userId, likedBookId } = req.body;
const sql = `DELETE FROM likes WHERE user_id=? AND liked_book_id=?;`;
const values = [userId, likedBookId];
conn.query(sql, values, (err, results) => {
if (err) {
return res.status(StatusCodes.BAD_REQUEST).json({
msg: `Error: ${err.code}`,
});
}
return res.status(StatusCodes.OK).json(results);
});
};
- DELETE FROM likes WHERE user_id=? AND liked_book_id=?를 실행하여 해당 레코드를 삭제한다.
- userId와 likedBookId를 받아서 likes 테이블에서 제거한다.
(3) 도서 목록 조회 시 좋아요 개수 포함하기
사용자가 도서를 조회할 때 좋아요 개수를 함께 보여주면 더 직관적인 UX를 제공할 수 있다.
📌 SQL 및 코드 구현
const books = (req, res) => {
let sql = `SELECT *, (SELECT count(*) FROM likes WHERE books.id = liked_book_id) AS likes FROM books;`;
conn.query(sql, [], (err, results) => {
if (err) {
return res.status(StatusCodes.BAD_REQUEST).json({
msg: `Error: ${err.code}`,
});
}
return res.status(StatusCodes.OK).json(results);
});
};
- SELECT count(*) FROM likes WHERE books.id = liked_book_id를 사용하여 각 도서의 좋아요 개수를 가져온다.
2. 장바구니 기능 구현
(1) 장바구니 추가 기능
사용자가 특정 도서를 장바구니에 추가할 수 있도록 cart_items 테이블에 데이터를 저장해야 한다.
📌 SQL 및 코드 구현
const addCartItems = (req, res) => {
const { book_id, counts, user_id } = req.body;
const sql = `INSERT INTO cart_items (book_id, counts, user_id) VALUES (?, ?, ?);`;
const values = [book_id, counts, user_id];
conn.query(sql, values, (err, results) => {
if (err) {
return res.status(StatusCodes.BAD_REQUEST).json({
msg: `Error: ${err.code}`,
});
}
return res.status(StatusCodes.CREATED).json(results);
});
};
- INSERT INTO cart_items (book_id, counts, user_id)을 실행하여 사용자가 선택한 도서를 장바구니에 추가한다.
(2) 장바구니 조회 기능
사용자가 장바구니에서 선택한 도서들을 조회할 수 있어야 한다.
📌 SQL 및 코드 구현
const getCartItems = (req, res) => {
const { user_id, selected } = req.body;
const sql = `SELECT cart_items.id, book_id, title, summary, counts, price
FROM cart_items LEFT JOIN books
ON cart_items.book_id = books.id
WHERE user_id = ? AND cart_items.id IN (?);`;
const values = [user_id, selected];
conn.query(sql, values, (err, results) => {
if (err) {
return res.status(StatusCodes.BAD_REQUEST).json({
msg: `Error: ${err.code}`,
});
}
return res.status(StatusCodes.OK).json(results);
});
};
- LEFT JOIN books를 활용하여 cart_items 테이블과 books 테이블을 연결해 장바구니 도서 정보를 가져온다.
- cart_items.id IN (?)를 통해 사용자가 선택한 아이템만 필터링한다.
(3) 장바구니 삭제 기능
사용자가 장바구니에서 특정 아이템을 삭제할 수 있도록 한다.
📌 SQL 및 코드 구현
const removeCartItems = (req, res) => {
const { id } = req.body;
const sql = `DELETE FROM cart_items WHERE id = ?;`;
const values = [id];
conn.query(sql, values, (err, results) => {
if (err) {
return res.status(StatusCodes.BAD_REQUEST).json({
msg: `Error: ${err.code}`,
});
}
return res.status(StatusCodes.OK).json(results);
});
};
- DELETE FROM cart_items WHERE id = ?을 사용하여 특정 장바구니 아이템을 제거한다.
