Предполагается, что приведенная ниже функция вызывается всякий раз, когда создается сообщение (успешно), а затем рассылает этот postId с некоторыми незначительными подробностями всем, кто следует за категорией (ошибка).
Пользователь может публиковать сообщения в более чем одной категории, и это будет выполняться несколько раз для одного и того же сообщения, но в этом случае он должен заменить любое существующее сообщение с соответствующим идентификатором postId. Не оптимизирован наверняка, но просто пытаюсь его запустить и запустить.
Но я получаю следующую ошибку при запуске нижеуказанной облачной функции:
Error: Value for argument "documentPath" is not a valid resource path. Path must be a non-empty string.
Моя структура базы данныхследующее. Не стесняйтесь и дайте мне знать, если вам нужна дополнительная информация для диагностики происходящего.
posts -> postId -> categories:["category1","category2"]
categories -> category -> followers -> uid -> following:true
feed -> uid -> posts -> postId
Облачная функция:
exports.addQuestionToCategory = functions.firestore.document('posts/{postId}').onCreate((docSnapshot, context) => {
const data = docSnapshot.data()
const selectedCategories = data.categories;
const newTimestamp = data.timestamp;
const newPostId = data.postId;
selectedCategories.forEach(category => {
var categoryFollowers = db.collection('categories').doc(category).collection('followers').where('following', '==', true)
var followingTransaction = db.runTransaction(transaction => {
return transaction.get(categoryFollowers).then(restDocs => {
restDocs.forEach(doc => {
var userDocData = doc.data()
var followerId = userDocData.id
var followerRef = db.collection(`feed/${followerId}/posts`).doc(newPostId)
const objectToAdd = {
"postId":newPostId,
"timestamp":newTimestamp,
"category":category
};
transaction.set(followerRef, objectToAdd);
})
return true
});
});
return followingTransaction.then(values => {
return Promise.resolve()
}) .catch(error => {
console.log(error)
return Promise.reject(error);
});
});
});