프로그래머스 풀스택 35
posted on 15 Oct 2024 under category programmers in series programmers
프로젝트: Node.js 기반의 REST API 구현(12)
💫 지옥에서 온 conn.query
// 삭제된 orders 테이블 콜백함수
(err, results) => {
if (err) {
console.error(err);
return res.status(StatusCodes.INTERNAL_SERVER_ERROR).end();
}
order_id = results.insertId;
}
// 삭제된 orderedBook 테이블 콜백함수
(err, results) => {
if (err) {
console.error(err);
return res.status(StatusCodes.INTERNAL_SERVER_ERROR).end();
}
💫 테이블 delete, truncate 차이
💫 SET FOREIGN_KEY_CHECKS = 0;
Error Code: 1701. Cannot truncate a table referenced in a foreign key constraint
그래서 해결책!
SET FOREIGN_KEY_CHECKS = 0;
SET FOREIGN_KEY_CHECKS = 1;
이걸로 다시 외래키를 살려주면 됨!
💫 insert 오류 찾기
💫 주문하기 insert
results = await conn.query(sql, [values]);
return res.status(StatusCodes.OK).json(results[0]);
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE orderedBook;
TRUNCATE orders;
TRUNCATE delivery;
SET FOREIGN_KEY_CHECKS = 1;
💫 cartItemId Delete SQL 생각하기
DELETE FROM cartItems WHERE id IN (1, 2, 3);
💫 cartItem 삭제
💫 주문 하기 끝!
💫 orderedBook insert
let [orderItems, fields] = await conn.query(sql, [items]);
💫 주문 내역 조회
SELECT orders.id, created_at, address, receiver, contact,
book_title, total_quantity, total_price
FROM orders LEFT JOIN delivery
ON orders.delivery_id = delivery_id
GROUP BY orders.id;
<POSTMAN 결과>
💫 주문 상세 조회
SELECT book_id, title, author, price, quantity
FROM orderedBook LEFT JOIN books
ON orderedBook.book_id = books.id
WHERE order_id=?;
<POSTMAN 결과>
Y 일을 통해 명확히 알게 되었거나 이해한 부분(한 일)에 대해 정리 :
DELETE와 TRUNCATE의 차이, SET FOREIGN_KEY_CHECKS = 0;, 주문 컨트롤러 전체적인 수정
SET FOREIGN_KEY_CHECKS = 0; 👉 외래키 체크 X
T 응용하여 배운 것을 어디에 어떻게 적용할지:
주문 API가 이렇게 어려운 걸 배웠다… 나중에 혼자 구현할 때 잘 쓸 수 있을듯!