BookStore API 주문 프로세스

SIMWOOHYUN·2025년 3월 19일
post-thumbnail

주문 생성 함수 : order

이 함수는 클라이언트로부터 받은 데이터를 기반으로 주문 정보를 데이터베이스에 저장하는 역할을 합니다. 이 과정에서 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 쿼리: delivery 테이블에 주소, 수신자, 연락처를 삽입합니다.
  • values: 삽입할 데이터를 배열로 정의합니다.
  • results: 쿼리 실행 결과를 저장하며, insertId 속성으로 생성된 ID를 얻습니다.
주문 정보 삽입 📝
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);

0개의 댓글