오늘은 orders, orderBooks, delivery 테이블을 만들고 이전과 같이 order에 맞는 로직을 작성하였다.





FK키를 만들때, 다음과 같은 규칙을 정하는 것을 "컨벤션"이라고 함
테이블에 넣는 순서는 delivery -> orders -> orderItem으로 넣어야한다.
각각의 테이블이 해당 테이블의 id를 참조하고 있기 때문이다.
방금 insert한 값을 가져오는 방법은 대표적으로 2가지가 있다.
SELECT MAX(id) FROM deliverySELECT last_insert_id()const order = (req,res)=>{
const {user_id, items, delivery, totalQuantity, totalPrice} = req.body;
// 배달 정보 넣기
let sql = `INSERT INTO delivery (address, receiver, contact) VALUES (?, ?, ?);`;
let values = [delivery.address, delivery.recevier, delivery.contact];
// 주문서
sql += `INSERT INTO orders (book_title, total_quantity, total_price, user_id, delivery_id) VALUES ((SELECT title FROM books WHERE id = ?), ?, ?, ?, (SELECT MAX(id) FROM delivery));`;
values.push(items[0].bookId, totalQuantity, totalPrice, user_id);
items.forEach((value)=>{
// orderItems 추가하기
sql += `INSERT INTO orderedBook (order_id, book_id, quantity) VALUES ((SELECT MAX(id) FROM orders),?,?);`;
values.push(value.bookId, value.quantity)
// 장바구니 삭제
sql += `DELETE FROM cartItems WHERE id = ?;`;
values.push(value.cartItemId);
})
db.query(sql, values, (err, results)=>{
if (err){
console.log(err);
return res.status(StatusCodes.BAD_REQUEST).end();
}
return res.status(StatusCodes.OK).json(results)
})
}