프로그래머스 풀스택 33
posted on 11 Oct 2024 under category programmers in series programmers
프로젝트: Node.js 기반의 REST API 구현(10)
💫 주문 API 시작
💫 주문 DB ERD 설계
💫 주문 DB 생성
💫 FK 제약조건 생성, 전체 제약조건 컨벤션
[FK 제약조건 이름 짓기] : “컨벤션”
fk_기준 테이블명_참조테이블명_참조키
cartItems.user_id > users.id : fk_cartItems_users_id
likes_user_id > users.id : fk_likes_users_id
각각의 테이블에 저 형식으로 FK 제약조건 이름 생성하기!
💫 주문하기 SQL 생각해보기
// 배송 정보 입력
INSERT INTO delivery (address, receiver, contact) VALUES ("서울시 중구", "김난영", "010-1234-5678");
// 주문 정보 입력
INSERT INTO orders (book_title, total_quantity, total_price, user_id, delivery_id)
VALUES ("어린왕자들", 3, 60000, 1, 1);
// 주문 상세 목록 입력
INSERT INTO orderedBook (order_id, book_id, quantity)
VALUES (1, 1, 1);
INSERT INTO orderedBook (order_id, book_id, quantity)
VALUES (1, 3, 2);
API 설계대로 delivery, orders, orderedBook순서대로 insert 쳐주기!
💫 delivery 테이블 insert, insertId 가져다쓰기
방금 insert한 데이터 PK 가져오는 법
SELECT last_insert_id();
SELECT max(id) FROM Bookshop.orderedBook;
const delivery_id = SELECT max(id) FROM delivery;
따라서 이런 형태로 변수를 만들어서 사용도 가능함
💫 delivery 테이블 insert, insertId 가져다쓰기
<POSTMAN 결과>
💫 orders insert
<POSTMAN 결과>
<Workbench 결과>
💫 orderedBook insert
sql = `INSERT INTO orderedBook (order_id, book_id, quantity) VALUES ?`;
// items.. 배열 : 요소들을 하나씩 꺼내서(foreach문 돌려서) >
values = [];
items.forEach((item) => {
values.push([order_id, item.book_id, item.quantity]);
console.log(values);
})
conn.query(sql, [values],
(err, results) => {
if (err) {
console.error(err);
return res.status(StatusCodes.INTERNAL_SERVER_ERROR).end();
}
return res.status(StatusCodes.OK).json(results);
})
};
conn.query(sql, [values]
로 values를 감싸주는 것 잊지 말기!!!Y 일을 통해 명확히 알게 되었거나 이해한 부분(한 일)에 대해 정리 :
방금 insert한 데이터 PK 가져오는 법, forEach문을 통해 2차원 배열(이중 배열)로 값을 벌크로 보내는 걸 배움!
W 배운 점과 시사점 :
forEach문을 통해 2차원 배열(이중 배열)로 값을 벌크로 보내는 걸 배움!
방금 insert한 데이터 PK 가져오는 법 : max() 사용!
T 응용하여 배운 것을 어디에 어떻게 적용할지:
주문 API 작성할 때 응용가능!