# #javascript #flutter #google-cloud-firestore #google-cloud-functions
Вопрос:
я хочу использовать облачные функции Google для подсчета документов в firestore и отображения счетчика в приложении.
Поэтому у меня есть следующий код, который работает:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const {FieldValue} = require("@google-cloud/firestore/build/src");
admin.initializeApp(functions.config().functions);
const doc = admin.firestore().collection('users').doc('CF7FOjfZ0iOlwXBc59AAEM7Qx1').collection('user').doc('general');
exports.countDocs = functions.firestore
.document('/users/CF7FOjfZ0iOlwXBc59AAEM7Qx1/trainings/{trainings}')
.onWrite((change, context) => {
if (!change.before.exists) {
// New document Created : add one to count
doc.update({numberOfDocs: FieldValue.increment(1)});
} else if (change.before.exists amp;amp; change.after.exists) {
// Updating existing document : Do nothing
} else if (!change.after.exists) {
// Deleting document : subtract one from count
doc.update({numberOfDocs: FieldValue.increment(-1)});
}
});
Теперь у меня проблема, что мне нужно получить идентификатор текущего пользователя. Я не знаю, как это сделать. Для firebase в реальном времени существует возможное решение с контекстом, но Google не реализовал его для Firestore.
Комментарии:
1. Я не уверен, что понимаю, в чем заключается ваш вопрос. Похоже, вы уже знаете, что UID текущего пользователя автоматически недоступен для облачных функций, запускаемых Firestore, и что вам необходимо передать UID по пути, который запускает функцию. Какой у вас к нам вопрос?
2. Спасибо за ваш ответ. Вопрос в том, как мне получить идентификатор текущего пользователя. Мне это нужно из-за моей структуры firestore /пользователей/uid. В противном случае я не смогу использовать облачные функции
3. Является
CF7FOjfZ0iOlwXBc59AAEM7Qx1
статичным или он станет подстановочным знаком, таким как идентификатор пользователя?
Ответ №1:
Если вы хотите вести учет для каждого пользователя, это будет:
admin.initializeApp(functions.config().functions);
exports.countDocs = functions.firestore
.document('/users/{uid}/trainings/{trainings}')
// Capture uid here 👆
.onWrite((change, context) => {
const doc = admin.firestore().collection('users').doc(context.params.uid).collection('user').doc('general');
// User uid here 👆
if (!change.before.exists) {
// New document Created : add one to count
doc.update({numberOfDocs: FieldValue.increment(1)});
} else if (change.before.exists amp;amp; change.after.exists) {
// Updating existing document : Do nothing
} else if (!change.after.exists) {
// Deleting document : subtract one from count
doc.update({numberOfDocs: FieldValue.increment(-1)});
}
});