BookStore - 도서 API 및 카테고리 API 설계

데브코스

목록 보기
63/133

도서 API 설계

BookController.js

const connection = require("../mariadb"); // db모듈
const { StatusCodes } = require("http-status-codes");

const allBooks = (req, res) => {
  let { category_id } = req.query; //이거 req할때, 값을 가져오는 방법이 query, body, params 이렇게 가져올 수 있는건가?

  if (category_id) {
    let sql = `SELECT * FROM books WHERE category_id = ?`; //이 sql에서 필요한 정보만 뽑아올 수도 있어 어떻게? WHERE절로 조건을 걸어서 내가 원하는 도서 정보만 뽑아오는 거지
    connection.query(sql, category_id, (err, result) => {
      if (err) {
        console.log(err);
        return res.status(StatusCodes.BAD_REQUEST).end();
      }
      if (result.length) return res.status(StatusCodes.CREATED).json(result);
      else return res.status(StatusCodes.NOT_FOUND).end();
    });
  } else {
    //전체 도서 리스트
    let sql = `SELECT * FROM books`; //이 sql에서 필요한 정보만 뽑아올 수도 있어
    connection.query(sql, (err, result) => {
      if (err) {
        console.log(err);
        return res.status(StatusCodes.BAD_REQUEST).end();
      }
      return res.status(StatusCodes.CREATED).json(result);
    });
  }
};

const bookDetail = (req, res) => {
  let { id } = req.params;
  id = parseInt(id); //문자열로 들어오니까 숫자로 바꿔줘야해

  let sql = `SELECT * FROM books WHERE id = ?`; //이 sql에서 필요한 정보만 뽑아올 수도 있어 어떻게? WHERE절로 조건을 걸어서 내가 원하는 도서 정보만 뽑아오는 거지
  connection.query(sql, id, (err, result) => {
    if (err) {
      console.log(err);
      return res.status(StatusCodes.BAD_REQUEST).end();
    }
    if (result[0]) return res.status(StatusCodes.CREATED).json(result[0]);
    else return res.status(StatusCodes.NOT_FOUND).end();
  });
};

module.exports = {
  allBooks,
  bookDetail,
};

books.js (라우터)

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

router.use(express.json());

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

module.exports = router

카테고리 API 설계

categoryController.js

const router = express.Router();

const { allCategory } = require("../controller/CategoryController"); //이게 라우터에서 쓸 컨트롤러들을 불러오는 명령어야.

router.use(express.json());

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

module.exports = router;

category.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;

CategoryController.js (컨트롤러)

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

const allCategory = (req, res) => {
  //카테고리 전체 목록 리스트
  let sql = `SELECT * FROM category`;

  connection.query(sql, (err, result) => {
    if (err) {
      console.log(err);
      return res.status(StatusCodes.BAD_REQUEST).end();
    }
    return res.status(StatusCodes.CREATED).json(result);
  });
};

module.exports = {
  allCategory,
};

profile
Dive Head First | Work Super Hard | Attract Great People

0개의 댓글