Облачная функция firebase добавить в корзину Reactjs?

Я пытаюсь создать корзину и сохранить ее в firebase с помощью redux-saga. мои тележки такие

{
  products: [
    {
      product_id: 'id1',
      product_name: 'product 1',
      product_quantity: 2,
      product_price: 50,
    },
    {
      product_id: 'id2',
      product_name: 'product 2',
      product_quantity: 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. Как я заставляю облачные функции получать корзину, и если она существует в базе данных, это просто увеличивает количество продукта, если корзина не существует в базе данных, она создает новую

См. также:  Развертывание функций Firebase: ошибка 3 - в запросе есть ошибки
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. kalipts

    На самом деле вам не нужно использовать облачную функцию для этого (хотя вы могли бы, если это важно). Вы можете просто получить существующий 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);
      }
    }
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: