Удалите сообщения из Firestore через 24 часа с помощью облачных функций - PullRequest
0 голосов
/ 20 апреля 2020

Я уже сделал это с базой данных Firebase Realtime, и раньше она прекрасно работала, но я решил переключиться на Firestore и пытаюсь использовать те же функции с облачными функциями.

Моя цель: Иметь облачную функцию, которая удаляет сообщения через 24 часа из Firestore

Я пытался использовать ту же функцию, что и у меня, и преобразовать ее в Firestore, но синтаксис не правильный, и я не очень знаком с Javascript.

Этот код для облачной функции, которая работала с моей RTDB:

'use strict';

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

// Cut off time. Child nodes older than this will be deleted.
const CUT_OFF_TIME = 24 * 60 * 60 * 1000; // 24 Hours in seconds.


exports.deleteOldMessages = functions.database.ref('/Message/{chatRoomID}/{messageId}').onWrite(function(change) {
var ref = change.after.ref.parent;
var now = Date.now()
var cutoff = (now - CUT_OFF_TIME) / 1000;
var oldItemsQuery = ref.orderByChild('seconds').endAt(cutoff);
return oldItemsQuery.once('value').then(function(snapshot) {
var updates = {};
snapshot.forEach(function(child) {
updates[child.key] = null;
console.log(cutoff)
});
return ref.update(updates);
});
});

Путь: Мой путь в Firestore другой из RTDB. Collection ('Message'). Document ('userId' (фактический userId этого пользователя)). Collection ('chatRoomId' (фактический chatRoomId этого чата)). Document ('messageId'), а затем одно из полей: Секунд: 1587334120

Я был бы очень признателен, если бы кто-нибудь мог помочь мне попытаться преобразовать / использовать ту же функциональность, что и моя предыдущая облачная функция, но работает для Firestore и включает новый путь. Мы очень ценим любую помощь

Редактировать: Это то, что я смог попробовать самостоятельно. Я понимаю, что должен запросить коллекцию, основанную на секундах, и оттуда посмотреть, прошло ли уже 24 часа, затем удалить документ, но я не уверен в синтаксисе того, как это сделать. В компиляторе я получаю сообщение об ошибке «Неожиданный запрос токена aslant [28, 25]»

exports.deleteOldFirestoreMessages = functions.firestore.document('Message/{userId}/{chatRoomId}/{messageId}').onWrite((change, context) => {
var now = Date().now
var cutoff = (now - CUT_OFF_TIME) / 1000;
const query = admin.firestore().collection('Message/{userId}/{chatRoomId}').where('seconds', '>=', cutoff)
const snapshots = await query.get();
const batch = firestore.batch();
snapshots.forEach(v => batch.delete(v.ref));
await batch.commit();
});

Вот ресурсы, которые я пытался просмотреть:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...