프로젝트/도서구매사이트

1020 도서, 카테고리 API 구현

thinktank911 2025. 10. 17. 16:46

<도서 API 구현>

도서 테이블 생성

  • 예약어가 있다면 피해서 컬럼 이름 변경 필요

INSERT INTO books (title, img, category_id, form, isbn, summary, detail, author, pages, contents, price, pub_date)
VALUES ("견우와 직녀", 8, 1, "ebook", 8, "오작교!!", "칠월 칠석!!", "김다리", 100, "목차입니다.", 20000, "2024-10-01");

INSERT INTO books (title, img, category_id, form, isbn, summary, detail, author, pages, contents, price, pub_date)
VALUES ("효녀 심청", 12, 0, "종이책", 9, "심청아..", "공양미 삼백석..", "김심청", 100, "목차입니다.", 20000, "2025-10-15");

INSERT INTO books (title, img, category_id, form, isbn, summary, detail, author, pages, contents, price, pub_date)
VALUES ("혹부리 영감", 22, 2, "ebook", 10, "노래 주머니..", "혹 두개 되버림..", "김영감", 100, "목차입니다.", 20000, "2025-10-05");

 

BookController 분리 - 도서 전체 조회, 상세 도서 조회

  • BokkController 분리하여 도서 전체 조회, 도서 상세 조회 콜백 로직을 작성한다.
  • 카테고리별 도서 목록 조회는 도서 전체 조회에서 query에서 받아온 category_id 유무에 따라 분기 처리
    • 카테고리별 도서 목록 조회와 도서 전체 조회의 URL path가 '/'로 같기 때문
const conn = require('../mariadb')  // db 모듈 가져오기
const {StatusCodes} = require('http-status-codes');     // status code 모듈


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

    if(category_id){
        // 카테고리별 도서 목록 조회
        let sql = `SELECT * FROM books WHERE category_id = ?`;
        // SELECT 쿼리문
        conn.query(sql, category_id,
            (err, results) => {
                if(err){
                    console.log(err)
                    return res.status(StatusCodes.BAD_REQUEST).end()
                }

                if(results.length > 0)
                    return res.status(StatusCodes.OK).json(results);
                else
                    return res.status(StatusCodes.NOT_FOUND).end();
            }
        )
    }else{
        // (요약된) 전체 도서 리스트
        let sql = `SELECT * FROM books`;
        // SELECT 쿼리문
        conn.query(sql,
            (err, results) => {
                if(err){
                    console.log(err)
                    return res.status(StatusCodes.BAD_REQUEST).end()
                }

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

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

    let sql = `SELECT * FROM books WHERE id = ?`;
    // SELECT 쿼리문
    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();
        }
    )
}

picsum 소개, 이미지 경로 추가

  • 사이트 링크 : https://picsum.photos/
  • 필요한 이미지 검색 가능
  • 이미지 연결 위해 아이디 번호만 추가하면 된다.

 

<카테고리 API 구현>

카테고리 테이블 생성

카테고리 전체 목록 조회 API 구현

const conn = require('../mariadb')  // db 모듈 가져오기
const {StatusCodes} = require('http-status-codes');     // status code 모듈

const allCategory = (req, res)=>{
    // 카테고리 전체 목록 리스트
    let sql = `SELECT * FROM category`;
    // SELECT 쿼리문
    conn.query(sql,
        (err, results) => {
            if(err){
                console.log(err)
                return res.status(StatusCodes.BAD_REQUEST).end()
            }

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

module.exports = {
    allCategory
}