오늘은 좋아요 테이블을 만들고, 책을 조회할때 마다 해당 정보를 보여줄 수 있도록 만들어 주는것을 했다.
먼저 좋아요 db를 설계한다.
user_id와 liked_book_id로 만들어 주고, 각각을 user테이블의 id와 book테이블의 id와 연결해준다.

나중에 JWT 토큰을 통해 user_id를 확인하고 그에 맞는 정보들을 꺼내어 책을 좋아요 눌렀는지 등을 확인해줄려고 한다.
좋아요 API의 핸들러 파일을 만들어서 추가와 삭제를 구현해준다.
const addLike = (req,res)=>{
const {id} = req.params;
const {user_id} = req.body;
let sql = "INSERT INTO likes (user_id, liked_book_id) VALUES (1, 3)";
let values= [user_id, id];
db.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 removeLike = (req,res)=>{
const {id} = req.params;
const {user_id} = req.body;
let sql = "DELETE FROM likes WHERE user_id = ? AND liked_book_id = ?;";
let values= [user_id, id];
db.query(sql, values, (err, results)=>{
if (err){
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
return res.status(StatusCodes.OK).json(results)
})
}
count()
count는 말 그대로 특정 조건에 만족하는 데이터의 갯수를 출력해주는 명령어이다.
다음과 같이 likes테이블에서 liked_book_id가 2인 데이터의 갯수를 출력해줄 수 있다.

해당 기능은 책에 대한 정보를 불러올때 사용할것이다.
AS
AS는 컬럼명이 아닌 별명을 붙여줄 수 있게 해주는 명령어로, 다음과 같이 서브쿼리를 불러왔을 때, 새 컬럼명을 지정해줄 수 있다.

서브쿼리
서브쿼리는 쿼리문 안에 들어가는 쿼리로 AS에 나온것 처럼 퀄리안에 (SELECT * ...)와 같이 표현해줄 수 있다.
해당 명령어들을 통해서 책 정보를 조회할 때, like를 표시해줄 수 있다.
bookContoreller.js파일의 책 정보를 조회하는 SQL에 다음과 같이 수정해주면 된다.
let sql = "SELECT *, (SELECT count(*) FROM likes WHERE liked_book_id=books.id) AS likes FROM Bookshop.books";
결과값이 존재하는지 확인하는 sql로 EXISTS를 통해서 유저가 좋아요을 눌렀는지 확인할 수 있다.

해당 sql코드를 들거와서 개별 도서에 적용했을때, 다음과 같이 잘 적용되는 것을 알 수 있다.
