Я работаю в интернет-магазине. Когда продукт удален из корзины покупок, должна быть запущена функция пожарной базы, чтобы пересчитать новую общую стоимость всех файлов, оставшихся в корзине.
export const onProductDelete = functions.database
.ref(`/orders/{userID}/{orderID}/products/{productID}`)
.onDelete(async (snapshot, context) => {
...
})
Когда продукт удаляется (вручную на информационной панели базы данных Firebase в реальном времени или программно), вызывается функция firebase, но цена не обновляется, поскольку количество продуктов одинаково (?).
Я записал массив продуктов в функцию, и вот результат:
products: [
,
{ test: 'test' },
,
,
{ test: 'test' }
]
Удаленные продукты не отображаются в базе данных, но заменяются запятыми и по-прежнему считаются продуктом (объектом)
Кто-нибудь знает, что происходит?
Обновление с дополнительной информацией
полная функция пожарной базы
export const onProductDelete = functions.database.ref(`/orders/{userID}/{orderID}/products/{productsID}`).onDelete(async (snapshot, context) => {
try {
const userID = context.params.userID;
const orderID = context.params.orderID;
const productID = context.params.productID;
const orderSnapshot = await admin.database().ref(`orders/${userID}/${orderID}`).once('value');
const orderData = orderSnapshot.val();
console.log('products: ', orderData.products); // products: [, { test: 'test' }, , , { test: 'test' }]
const amountOfProducts = orderData.products.length;
const newSubTotal = amountOfProducts * 100; //Fixed product price for example
const taxes = newSubTotal * 0.10; //Fixed tax of 10% for example
const total = newSubTotal + taxes;
return admin.database().ref(`orders/${userID}/${orderID}/price`).set({ amountOfProducts, subTotal: newSubTotal, taxes, total });
} catch(error) {
console.log('Error in onProductDelete: ', error);
return null;
}
});