[9주차 04] 주문 API 마무리

개발냥이·2025년 3월 20일

데브코스

목록 보기
29/75
post-thumbnail

Mysql 데이터 삭제

  1. DELETE
    DELETE FROM 테이블 명 (WHERE)
    where 절이 없으면 모든 행 삭제 + 테이블은 남아 있음
  2. DROP
    DROP TABLE 테이블명
    테이블을 통째로 삭제
  3. TRUNCATE
    TRUNCATE 테이블명
    모든 행 삭제 + 테이블은 남아 있음
  • DELETE vs TRUNCATE 차이점
    똑같아 보였던 둘의 차이가 있다.
    바로 제약 조건 고려 여부이다.
  • 외래키와 같이 제약 조건이 있는 경우
    DELETE는 제약 조건을 고려하고
    TRUNCATE는 고려하지 않는다

제약조건을 보지 않고 삭제하는 법

SET FOREIGN_KEY_CHECKS = 0;

주문하기 API 마무리 하기

정말 어려웠던 주문하기 API가 드디어 끝났다 ㅠㅠ
분명 강의 보면서 따라 했는데도 오류가 떠서 정말 힘들었던 파트였다
결국 저장된 DB의 문제였다는...

  1. 필요한 데이터 받아오기

items : 장바구니 정보
delivery : 배송 정보
사용자 정보 , 책 정보

  1. 배송 정보 저장 (delivery Table)
let sql = `INSERT INTO delivery (address, receiver , contact) VALUES (? , ? , ?)`;
let values = [delivery.address, delivery.receiver, delivery.contact];
let [results] = await conn.execute(sql, values);
delivery_id = results.insertId;
  1. 주문 정보 저장 (orders Table)
sql = `INSERT INTO orders (book_title , total_quantity , total_price , user_id , delivery_id) VALUES (? , ? , ? , ? , ?)`;
values = [first_book_title, total_quantity, total_price, user_id, delivery_id];
[results] = await conn.execute(sql, values);
order_id = results.insertId;
  1. 장바구니의 정보 가져오기 (cartItems Table)
sql = `SELECT cart_book_id , quantity FROM cartItems WHERE id IN (?)`;
let [orderItems, fields] = await conn.query(sql, [items]);
  1. 주문한 책 저장 (ordered_book Table)
sql = `INSERT INTO ordered_book (order_id, book_id , quantity) VALUES ?`;
values = [];
orderItems.forEach(v => {
  values.push([order_id, v.cart_book_id, v.quantity]);
});
results = await conn.query(sql, [values]);
  1. 주문한 제품 장바구니에서 삭제 (cartItems Table)
let sql = `DELETE FROM cartItems WHERE id IN (?)`;
let result = await conn.query(sql, [items]);

책 정보와 사용자 정보만 가져와서 바로 주문만 하면 될 줄 알았는데
장바구니 정보와 배송 정보를 가져왔다가 주문할 책 저장하고
마지막에 장바구니에 주문한 책 정보 삭제까지 정말 여러 과정을 거쳤다 ㅠㅠ
솔직히 강의 한번에 이해가 되지 않아서 발생한 오류를 수정하면서
어려번 코드를 보니 겨우 이해만 된 정도이다
이런 복잡하고 긴 로직을 백엔드 개발자가 한다니 정말 대단한 거 같다

profile
웹 개발자가 되고픈

0개의 댓글