연속해서 장바구니 추가는 어떻게 하는 걸까요?🧐

임수정·2023년 3월 20일
0

위코드 1차 프로젝트 진행시 공부한 내용을 정리하였습니다.

장바구니에 POST하는 API를 다 만들고 나서 코드 refactoring하는 시간을 가지다 연속해서 장바구니 버튼을 눌렀을 때 수량이 변경되는 코드로 바꾸고 싶다는 생각을 하였습니다.

기존에 있는 코드에서 조금만 수정하면 될것같았는데 생각보다 쉽지 않은 작업이였습니다.🥹

 INSERT INTO carts(
  item_id, user_id, quantity)
   VALUES(?,?,?),
  [itemId, userId, quantity]
  )

기존에 제가 작성한 코드입니다. 리스트 & 상세페이지에서 장바구니 버튼을 누르면 단순히 장바구니에 추가되는 코드를 작성했었습니다. 이렇게 작성하다보니 연속추가하는 기능은 구현할 수 없었습니다.

const [cartItem] = await appDataSource.query(
  SELECT 
    id,quantity
    FROM carts
    WHERE item_id = ?
    `,
    [itemId]
  )  //(1)

  if (!cartItem) {
    return await appDataSource.query(
     INSERT INTO carts 
     (item_id, user_id, quantity)
     VALUES (?, ?, ?)`,
     [itemId, userId, quantity]
    )
  } //(2)

  const cartId = cartItem.id
  const cartQuantity = cartItem.quantity
  const newQuantity = cartQuantity + quantity
   //(3)
 
  return await appDataSource.query(
    `UPDATE carts
    SET quantity = ${newQuantity}
    WHERE id = ${cartId}`
  )
} //(4)
  • (1) : carts테이블에서 item_id를 조건으로 id와 quantity를 가지고 옵니다.
    => item_id를 추출하지 않을까요? : 이 질문에 대한 답은 굉징히 간단합니다.
    cart에는 여러 명이 같은 아이템을 담을 수 있습니다. 그래서 위 코드에 "user_id"라는 조건을 같이 써주면 item_id를 추출할 수 있습니다.(참고해주세요!)
  • (2) : cart정보들이 없다면 장바구니에 추가하는 query문입니다.
  • (3) : (1)코드에서 id와 quantity값들만 추출하여 query문에 들어갈 숫자로 만들어줍니다.
  • (4) : 위에서 카드 정보가 있다면 (4)코드로 와서 수량을 업데이트 해주는 query문입니다.

이렇게 정리를 하고 보니 정말 많은 refactoring이 있었네요!

코드를 다 작성하였다고 끝난 것이 아니라 계속해서 분석하면서 refactoring하는 것이 중요하다는 걸 깨달은 코드 작성이였습니다!

profile
부족함을 인정하고 채워나가는 개발자! (Node.js 개발자)

0개의 댓글