
books 테이블을 만들고, 4개의 더미 데이터를 넣어놨어요.

이전에 UsersController를 라우터에서 분리했듯이

라우터와 컨트롤러를 분리했어요.
도서 전체 조회 api를 위해 select books하는 코드를 추가했는데, 명세서에서 요구하는 것보다 더 많은 칼럼이 리턴되었어요.
저는 당연히 select * 를 고칠 줄 알았는데, 인강에서는 프론트에서 알아서 가공시키게 할 것이라고 해서 흠...이게 맞나 싶었어요.
BookListDTO랑 BookDetailDTO를 따로 만들어서 해당 DTO에 맞게 가공하는 것이 올바른 백엔드 코드라고 생각해요.
하지만 일단 강의에 따라가야하니 모든 정보를 반환하도록 구현했어요.


export const findBooks = (req, res) => {
const sql = 'SELECT * FROM books';
db.query(sql, (err, results) => {
if (err) return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({message: err.message});
return res.status(StatusCodes.OK).json(results);
});
};
export const findBookById = (req, res) => {
const { id } = req.params;
const sql = 'SELECT * FROM books WHERE id = ?';
db.query(sql, id, (err, results) => {
if (err) return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({message: err.message});
if (results.length === 0) return res.status(StatusCodes.NOT_FOUND).end();
return res.status(StatusCodes.OK).json(results[0]);
});
};
piksum은 더미 이미지를 추가할 수 있는 사이트, 링크만 입력하면 이미지를 사용할 수 있어요.
우리는 해당 이미지 url에 id만 추가해서 이미지를 받아올 수 있도록 img id를 칼럼에 추가했어요.
export const findBooks = (req, res) => {
const { categoryId } = req.query;
if ( categoryId ) {
const sql = 'SELECT * FROM books WHERE category_id = ?';
db.query(sql, categoryId, (err, results) => {
if (err) return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({message: err.message});
return res.status(StatusCodes.OK).json(results);
});
} else {
const sql = 'SELECT * FROM books';
db.query(sql, (err, results) => {
if (err) return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({message: err.message});
return res.status(StatusCodes.OK).json(results);
});
}
};
쿼리 스트링의 유무에 따라 분기별로 db에서 데이터를 가져오도록 바꾸었어요.

카테고리를 따로 테이블로 나누었어요.
import db from "../db.js";
import {StatusCodes} from "http-status-codes";
export const findAllCategories = (req, res) => {
const sql = 'SELECT * FROM category';
db.query(sql, (err, results) => {
if (err) return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({message: err.message});
return res.status(StatusCodes.OK).json(results);
});
};
기존 조회문과 똑같이 빠르게 만들었어요.

잘 만들어진 것을 볼 수 있어요.