📚요약
지난 시간부터 이번 시간까지 계속 프로젝트를 설계에 따라 구현하고 있습니다.
📖책 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
다음 시간에 계속...
출처 & 참고
김송아 강사님의 강의
'개발 > 프로그래머스 데브코스' 카테고리의 다른 글
프로그래머스 데브코스 35일차 with. TS 웹 풀스택 (0) | 2024.05.24 |
---|---|
데브코스 스터디(알고리즘, 코테) 9회차 (0) | 2024.05.23 |
프로그래머스 데브코스 33일차 with. TS 웹 풀스택 (0) | 2024.05.22 |
프로그래머스 데브코스 31일차 with. TS 웹 풀스택 (0) | 2024.05.20 |
프로그래머스 데브코스 7주차 회고 with.TS 웹 풀스택 (0) | 2024.05.20 |