云功能firebase添加到购物车reactjs?

问题描述

我正在尝试创建购物车,并使用redux-saga将其保存到firebase。 我的购物车是这样的

{
  products: [
    {
      product_id: 'id1',product_name: 'product 1',product_quantity: 2,product_price: 50,},{
      product_id: 'id2',product_name: 'product 2',product_price: 2,}
  ],userID: 'user1'
}

firebase.js

export const addToCartFirebase = (cart) => {
  firestore.send(cart); //fake
};

cart.saga.js

export function* handleAddToCart(action) {
  const { cart } = action;
  const newCart = yield call(addToCartFirebase,cart);
}

我是Firebase的新手。我如何使云功能接收购物车,如果它存在于数据库中,只会增加产品数量,如果数据库中不存在该购物车,则会创建一个新的购物车

解决方法

您实际上不需要为此使用云功能(如果重要的话,您可以使用)。您可以简单地获取现有的user文档并相应地更新products数组。像这样:

const addCart = async product {
  const db = firestore().collection(userCollection);
  const userSnap = await db.where("userID","==","user1").get();
  const userDoc = userSnap.docs[0].exists ? { id: userSnap.docs[0].id,...userSnap.docs[0].data() } : null;
  if (userDoc) { // If user exists,update his products array
    const products = userDoc.products.some(prod => prod.product_id === product.product_id)
      ? userDoc.products.map(prod => prod.product_id === product.product_id ? ({ ...prod,product_quantity: prod.product_quantity + 1 }) : prod)
      :
      [ ...userDoc.products,product ];
      await db.doc(userDoc.id).update({ products });
  }
  else {
     const newUserData = { userID: "user1",products: [product] };
     await db.add(newUserData);
  }
}