- 전체 도서 목록에는 도서 상세 정보 포함함 → 필요한 데이터만 선별하여 구현 필요
- 전체 도서 조회 (이미지 경로 n개씩, limit/offset FE에서 req로 줌)
- Method : GET
- URL : /books?limit={page당 도서 수}¤tPage={현재 page}
- HTTP status : 200(성공),
- Req
- Res :
{
{
id :
title :
img : picksum imge id
summary :
author :
price :
likes :
pubDate : 출간일
},
{
id :
title :
img : picksum imge id
summary :
author :
price :
likes :
pubDate : 출간일
}, …
}
- 개별 도서 조회 (이미지 경로)
- Method : GET
- URL : /books/{bookid}
- HTTP status : 200(성공),
- Req :
- Res :
{
id :
title :
img : picksum imge id
category :
format :
isbn :
summary :
description :
author :
pages :
index : 목차
price :
likes :
liked : 내가 좋아요 했는지
pubDate : 출간일
}
- 카테고리별 도서 목록 조회 (카테고리 id 보내줘야함)
- Method : GET
//new에 따라 신간조회 true⇒ 신간 (출간일 1 이내 기준)
- URL : /books?**categoryid={categoryid}** &new={boolean}
- HTTP status : 200(성공),
- Req
- Res :
{
{
id :
title :
img : picksum imge id
summary :
author :
price :
likes :
pubDate : 출간일
},
{
id :
title :
img : picksum imge id
summary :
author :
price :
likes :
pubDate : 출간일
}, …
}
bookeController.js
const conn = require('../mariadb');
const { StatusCodes } = require('http-status-codes');
const allBooks = (req, res) => {
let { category_id, news, limit, currentPage } = req.query;
// limit : page 당 도서 수 , currentPage : 현재 페이지의 번호
// offset : limit * (currentPage-1)
let offset = limit * (currentPage-1);
let sql = "SELECT * FROM books";
let values = [];
if (category_id && news) {
sql += " WHERE category_id = ? AND pub_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW();";
values = [category_id];
}
else if (category_id) {
sql += " WHERE category_id = ?";
values = [category_id];
}
else if (news) {
sql += " WHERE pub_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW();";
}
sql += " LIMIT ? OFFSET ?";
values.push(parseInt(limit), offset);
conn.query(sql, values,
(err, results) => {
if (err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
if (results.length)
return res.status(StatusCodes.CREATED).json(results);
else
return res.status(StatusCodes.NOT_FOUND).end();
})
};
const bookDetail = (req, res) => {
let { id } = req.params;
let sql = `SELECT * FROM books LEFT JOIN category ON books.category_id = category.id WHERE books.id = 1;`;
conn.query(sql, id,
(err, results) => {
if (err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
if (results[0])
return res.status(StatusCodes.CREATED).json(results[0]);
else
return res.status(StatusCodes.NOT_FOUND).end();
})
};
module.exports = { allBooks, bookDetail };
categoryController.js
const conn = require('../mariadb');
const { StatusCodes } = require('http-status-codes');
const allCategory = (req, res) => {
let sql = "SELECT * FROM category";
conn.query(sql, (err, results) => {
if (err) {
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
return res.status(StatusCodes.CREATED).json(results);
})
};
module.exports = {
allCategory
};
category.js (라우터)
const express = require('express');
const { allCategory } = require('../controller/categoryController')
const router = express.Router();
router.use(express.json());
router.get('/', allCategory); // 전체 카테고리 조회
module.exports = router