다양한 테이블 생성하고 API 구현하기

ssomae·2024년 10월 6일

DevCourse

목록 보기
27/29
post-thumbnail

도서 테이블 생성

books relatios

도서 API 구현 전 controller 분리하기

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

dotenv.config();

const allBooks = (req, res) => {
    res.json('전체 도서 조회 ');
};

const bookDetail = (req, res) => {
    res.json('개별 도서 조회');
};

const booksByCategory = (req, res) => {
    res.json('카테고리별 도서 목록 조회');
}; 

module.exports = {
    allBooks,
    bookDetail,
    booksByCategory
};

전체 도서 조회, 개별 도서 조회

const allBooks = (req, res) => {
    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);
    })
};

const bookDetail = (req, res) => {
    let { id } = req.params;
    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[0])
                return res.status(StatusCodes.OK).json(results[0]);
            else
                return res.status(StatusCodes.NOT_FOUND).end();
        }
    )
};

DB에 이미지 경로 추가

카테고리별 도서 조회

const booksByCategory = (req, res) => {
    let { category_id } = req.query;
    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();
        }
    )
}; 

기존 전체 도서 조회랑 API가 겹쳐서 문제가 생긴다.
API를 합쳐야 할것 같다.

  • 전체 도서 조회에서 쿼리가 있으면 카테고리 별 도서 조회로
  • 쿼리가 없으면 전체 도서 조회로
const allBooks = (req, res) => {
    let { category_id } = req.query;
    if (category_id) {
        let 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 {
        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);
        })   
    }
};

카테고리 테이블 생성 및 API 설계

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

dotenv.config();

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.OK).json(results);
    }) 
}

module.exports = {
    allCategory
};
profile
성장해나갈 개발자

0개의 댓글