데브코스

[7주차 - DAY4] 도서 API 구현

미안하다 강림이 좀 늦었다 2024. 4. 11. 13:15

 

 

도서 API 구현

테이블 생성

format이 예약어라서 컬럼명을 form으로 설정했다.

 

BookController 분리

books.js

const express = require('express');
const router = express.Router();
const {
    allBooks,
    bookDetail
} = require('../controller/BookController');

router.use(express.json());

router.get('/', allBooks); // (카테고리별) 전체 도서 조회
router.get('/:id', bookDetail); // 개별 도서 조회

module.exports = router;

 

BookController.js

const conn = require('../mariadb');
const { StatusCodes } = require('http-status-codes');

const allBooks = (req, res) => {
    // ...
};

const bookDetail = (req, res) => {
    // ...
};

module.exports = {
    allBooks,
    bookDetail
};

 

(카테고리별) 전체 도서 조회

쿼리로 카테고리 아이디가 들어올 경우에는 해당 카테고리인 도서들을 조회하고, 요청으로 들어온 카테고리 아이디가 없을 경우 존재하는 모든 도서를 조회한다.

const allBooks = (req, res) => {
    const { category_id } = req.query;

    if (category_id) {
        const sql = `SELECT * FROM books WHERE category_id = ?`;
        conn.query(sql, category_id,
            (err, results) => {
                if (err) {
                    console.log(err);
                    return res.status(StatusCodes.BAD_REQUEST).end();
                }

                if (results.length) {
                    return res.status(StatusCodes.OK).json(results);
                } else {
                    return res.status(StatusCodes.NOT_FOUND).end();
                }
            })
    } else {
        const sql = `SELECT * FROM books`;
        conn.query(sql, (err, results) => {
            if (err) {
                console.log(err);
                return res.status(StatusCodes.BAD_REQUEST).end();
            }

            return res.status(StatusCodes.OK).json(results);
        })
    }
};

 

상세 도서 조회

url로 들어온 아이디에 해당하는 도서를 조회한다.

const bookDetail = (req, res) => {
    let id = parseInt(req.params.id);

    const sql = `SELECT * FROM books WHERE id = ?`;
    conn.query(sql, id,
        (err, results) => {
            if (err) {
                console.log(err);
                return res.status(StatusCodes.BAD_REQUEST).end();
            }

            if (results.length) {
                return res.status(StatusCodes.OK).json(results[0]);
            } else {
                return res.status(StatusCodes.NOT_FOUND).end();
            }
        })
};

 

 

카테고리 API 구현

카테고리 전체를 보여주기 위한 API이다.

테이블 생성

 

카테고리 전체 목록 조회

category.js

const express = require('express');
const router = express.Router();
const {
    allCategory
} = require('../controller/CategoryController');

router.use(express.json());

router.get('/', allCategory); // 카테고리 전체 목록 조회

module.exports = router;

 

CategoryController.js

const conn = require('../mariadb');
const { StatusCodes } = require('http-status-codes');

const allCategory = (req, res) => {
    const 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.OK).json(results);
    })
}

module.exports = { allCategory };