백엔드 실습(9)

wltjd1688·2025년 3월 18일

풀사이클

목록 보기
36/74

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

주문 DB 생성

  • orders

  • delivery

  • orderBooks

FK키를 만들때, 다음과 같은 규칙을 정하는 것을 "컨벤션"이라고 함

주문하기 SQL 생각해보기

테이블에 넣는 순서는 delivery -> orders -> orderItem으로 넣어야한다.
각각의 테이블이 해당 테이블의 id를 참조하고 있기 때문이다.

delivery 테이블 insert, insertId 가져다쓰기

방금 insert한 값을 가져오는 방법은 대표적으로 2가지가 있다.

  • SELECT MAX(id) FROM delivery
    해당 테이블의 id가 가지는 최댓값을 가지고 온다.
    우리코드에서는 이걸 쓸 예정이다.
  • SELECT last_insert_id()
    마지막으로 들어간 아이디를 가져온다.

order 로직 작성

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)
    })        
}
profile
일단 해!!!!

0개의 댓글