중복 상품 등록 error 해결

노영완·2023년 9월 13일
0

ToyProject(더다주)

목록 보기
13/13
post-thumbnail

Cart, WishList에 상품을 등록하는데 중복에 상품을 등록할 때 에러가 있어 해결.

예를 들어 유저1, 유저2가 있고 상품1이 있다고 가정 유저 1이 Cart에 상품1을 등록했으면 유저 2가 상품1을 등록할 수 없는 error가 생김.

기존 코드

  const findProductCart = await Cart.find({product_id: _id });
if(findProductCart) throw new Error("이미 등록된 상품 입니다!")

기존 코드를 보면 당연히 앞선 문제가 생길 수 밖에 없다.

내 생각

1. product에 대한 조건만 찾을게 아니라 유저에 대한 조건도 찾는다.

2. $and([])를 이용해 앞선 첫번째 조건을 만족한다.

3. 조건이 있냐 없나에 따라 에러를 띄운다.

해결

$and([])를 이용해 앞선 첫번째 조건을 만족한다.

    const findProductCart = await Cart.find({
      $and: [{ "user._id": req.user._id }, { product_id: _id }],
    });

조건이 있냐 없나에 따라 에러를 띄운다.

if(findProductCart) throw new Error("이미 등록된 상품 입니다!")

앞선 코드로 문제를 해결할려고 하였지만 해결하지 못했다. 이유는 등록된 상품이 아닌데도 등록된 상품이라는 에러 메세지를 띄웠다. 분명히 db에는 없는 상품인데 코드는 있다고 판별하였다. 그래서 콘솔을 찍어보왔다.

// 상품이 db에 없다는 가정이었을 때 console을 찍은거다
console.log(findProductCart) // []

상품이 db에 없을때는 빈배열을 반환했다. 단순히 있냐 없냐에 따라서 에러를 띄우는 생각은 틀린 것 같다.

다시 생각

findProductCart.length를 사용하자

1.findProductCart.length === 0이면 Cart, WishList에 save를 해 등록하자

2. findProductCart.length !== 0이면 에러를 띄우자 0이 아니라는 소리는 이미 Cart,WishList에 해당 상품이 있다는 소리이니깐

 if (findProductCart.length !== 0)
      throw new Error("이미 장바구니에 등록된 상품입니다.");
 if (findProductCart.length === 0) {
      const cart = new Cart({
        user: {
          _id: req.user._id,
        },
        product_id: _id,
        src,
        name,
        price,
        quantity,
      });
      await cart.save();
    }

0개의 댓글