본문 바로가기

개발/프로그래머스 데브코스

프로그래머스 데브코스 34일차 with. TS 웹 풀스택

📚요약

지난 시간부터 이번 시간까지 계속 프로젝트를 설계에 따라 구현하고 있습니다.

 

📖책 API

📄구현

전체 책 목록 조회 & 개별 책 조회
카테고리 별 목록 조회

 

📑같은 URL을 공유하는 API 처리

router.get("/", getBookList); // 전체 책 목록 조회 API
router.get("/", getCategoryBookList); // 카테고리 별 책 목록 조회 API // ?categoryId=id

위 코드와 같이 query string으로 구분되어 요청되는 URL이 같은 경우 우선 서버는 먼저 있는 API를 받아들이고 처리합니다. 전체 책 목록 조회 API가 위에 있으니 URL에 query string이 있어도 전체 책 목록만 조회되게 됩니다.

 

이를 해결하기 위해서는 콜백 함수 내부로 들어가서 조건문을 통해 처리할 수 있습니다.

const getBookList = (req, res) => {
  const { categoryId } = req.query;
  let sql = `SELECT *, categories.name as category_name FROM books LEFT JOIN categories ON books.category_id = categories.id`;

  if (categoryId) { // categoryId가 query에 있는지 확인
    // categoryId가 있으면
    // 카테고리별 책 목록 조회
    sql += ` WHERE category_id = ?`;
    return mariadb.query(sql, categoryId, (err, results) => {
      if (err) {
        console.log(err);
        return res.status(StatusCodes.BAD_REQUEST).end();
      }

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

      res.status(StatusCodes.NOT_FOUND).end();
    });
  }
  // categoryId가 없으면
  // 전체 책 목록 조회
  mariadb.query(sql, (err, results) => {
    if (err) {
      console.log(err);
      return res.status(StatusCodes.BAD_REQUEST).end();
    }

    res.status(200).json(results);
  });
};

 

📑JOIN을 이용한 카테고리 이름 추가

SELECT *, categories.name as category_name FROM books LEFT JOIN categories ON books.category_id = categories.id

JOIN을 사용해 주고 조회하는 부분에 as를 통해서 칼럼의 이름을 바꿔줄 수 있습니다.

 

📖카테고리 API

다른 URL과 구분해야 하기 때문에 routes와 controller에 새로운 파일을 추가해 줍니다.

 

📄구현

카테고리 전체 목록 조회

 

🍯tip! 테이블 칼럼의 이름을 고민하다 보면 예약어를 사용하는 경우가 있기 때문에 고민하는 이름을 workbench에 작성해 보면 색깔이 달라지는 것을 보고 고민할 수 있다.

예약어 구분

 

🍯tip! 테스트용 사진을 매번 다운로드해서 사용하기 귀찮으신 분들은 Lorem Picsum을 이용하시면 URL을 통해 편하게 이미지를 사용해 볼 수 있습니다.
 

Lorem Picsum

Lorem Ipsum... but for photos

picsum.photos

 

자세한 코드는 Github에서 확인할 수 있습니다.

 

ProgrammersSchool/PROJECT-BOOKSHOP at main · nulzi/ProgrammersSchool

프로그래머스 데브코스에서 학습하는 것들을 모아두는 레포. Contribute to nulzi/ProgrammersSchool development by creating an account on GitHub.

github.com

 

다음 시간에 계속...

 

출처 & 참고

김송아 강사님의 강의