
이 함수는 클라이언트로부터 받은 데이터를 기반으로 주문 정보를 데이터베이스에 저장하는 역할을 합니다. 이 과정에서 delivery, orders, orderedBook 테이블에 데이터를 삽입하고, 장바구니 항목을 삭제하는 작업을 수행합니다.
const conn = await mariadb.createConnection({
host: "localhost",
user: "root",
password: "root",
database: "BookStore",
dateStrings: true,
});
호스트: localhost로 설정되어 있어, 현재 실행 중인 서버와 같은 머신에서 데이터베이스가 실행 중임을 의미합니다.
사용자 및 비밀번호: root로 설정되어 있어, 데이터베이스에 대한 모든 권한을 가집니다.
데이터베이스 이름: BookStore로 설정되어 있어, 이 데이터베이스 내에서 작업을 수행합니다.
dateStrings: true로 설정되어 있어, 날짜 관련 필드를 문자열로 처리합니다.
const { items, delivery, totalQuantity, totalPrice, userId, firstBookTitle } =
req.body;
items: 장바구니 항목 ID 목록
delivery: 배송 정보 (주소, 수신자, 연락처)
totalQuantity: 주문 총 수량
totalPrice: 주문 총 가격
userId: 주문자 ID
firstBookTitle: 주문한 책의 제목 (첫 번째 책)
let sql = "INSERT INTO delivery (address, receiver, contact) VALUES(?,?,?)";
let values = [delivery.address, delivery.receiver, delivery.contact];
let [results] = await conn.execute(sql, values);
let delivery_id = results.insertId;
sql = `INSERT INTO orders (book_title, total_quantity, total_price, user_id, delivery_id)
VALUES (?,?,?,?,?);`;
values = [firstBookTitle, totalQuantity, totalPrice, userId, delivery_id];
[results] = await conn.execute(sql, values);
let order_id = results.insertId;
SQL 쿼리: orders 테이블에 책 제목, 총 수량, 총 가격, 사용자 ID, 배송 ID를 삽입합니다.
values: 삽입할 데이터를 배열로 정理합니다.
results: 쿼리 실행 결과를 저장하며, insertId 속성으로 생성된 주문 ID를 얻습니다.
sql = "SELECT book_id, quantity FROM cartItems WHERE id IN (?)";
let [orderItems, fields] = await conn.query(sql, [items]);
sql = `INSERT INTO orderedBook (order_id, book_id, quantity)
VALUES ?;`;
values = [];
orderItems.forEach((item) => {
values.push([order_id, item.book_id, item.quantity]);
});
results = await conn.query(sql, [values]);
SQL 쿼리: 장바구니 항목에서 책 ID와 수량을 조회합니다.
orderItems: 조회된 항목을 저장합니다.
orderedBook 테이블 삽입: 각 항목에 대해 주문 ID, 책 ID, 수량을 삽입합니다.
forEach: 각 항목을 반복하여 삽입할 데이터를 준비합니다.
let result = await deleteCartItems(conn, items);
deleteCartItems 함수: 장바구니 항목을 삭제하는 함수를 호출합니다.
conn: 데이터베이스 연결 객체
items: 삭제할 장바구니 항목 ID 목록
return res.status(StatusCodes.OK).json(result);