좋아요
DB
좋아요 추가
사용자 id는 원래 jwt로 해야 되는데 지금은 일단 테스트한다고 request의 body로 받는다.
const addLike = (req, res) => {
const bookId = parseInt(req.params.id);
const userId = parseInt(req.body.userId);
const sql = `INSERT INTO likes (user_id, liked_book_id) VALUES (?, ?)`;
const values = [userId, bookId];
conn.query(sql, values,
(err, results) => {
if (err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
return res.status(StatusCodes.CREATED).json(results);
});
};
좋아요 삭제
const removeLike = (req, res) => {
const bookId = parseInt(req.params.id);
const userId = parseInt(req.body.userId);
const sql = `DELETE FROM likes WHERE user_id = ? and liked_book_id = ?`;
const values = [userId, bookId];
conn.query(sql, values,
(err, results) => {
if (err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
if (results.affectedRows) {
return res.status(StatusCodes.OK).json(results);
} else {
return res.status(StatusCodes.NOT_FOUND).end();
}
});
};
도서 API 수정
전체 도서 조회
응답을 보내줄 때 좋아요 수도 보내줘야한다.
개별 도서 조회
liked는 사용자가 좋아요를 눌렀는지에 대한 여부를 나타낸다. 0이면 누르지 않은 것이고, 1이면 누른 상태이다.
liked 컬럼을 만드는 쿼리는 아래와 같이 사용해도 무방하다.
SELECT EXISTS (SELECT * FROM likes WHERE user_id = 1 AND liked_book_id = 1);
카테고리 테이블 id 컬럼명 수정
개별 도서 조회에서 books 테이블과 category 테이블을 조인하게 된다. 조인 결과를 보면 id 컬럼이 두 개가 있는 것을 확인할 수 있다. 첫 번째 id는 책의 id이고, 두 번째 id는 카테고리의 id이다. 이것을 json에 담게 되면 id가 덮어씌워지기 때문에 원하는 결과가 나오지 않는다. 따라서 category 테이블의 id 컬럼명을 category_id로 수정해 준다.
배운 점
- PK가 없으면 workbench에서 read only 상태로 뜬다. 이 경우에는 SQL문으로 데이터를 삽입해야 한다.
- 서브 쿼리를 사용하면 join이 아니더라도 두 테이블을 묶는 것과 같은 결과를 낼 수 있다.
- EXISTS는 참 또는 거짓을 반환하는 연산자다.
'데브코스' 카테고리의 다른 글
[8주차 - DAY3] 주문 API 구현 (0) | 2024.04.17 |
---|---|
[8주차 - DAY2] 장바구니 API 구현 (0) | 2024.04.16 |
[7주차 - DAY5] 도서 API 구현(2) (0) | 2024.04.12 |
[7주차 복습 발표] 암호화 (0) | 2024.04.11 |
[7주차 - DAY4] 도서 API 구현 (0) | 2024.04.11 |