47 lines
1.2 KiB
JavaScript
47 lines
1.2 KiB
JavaScript
const admin = require("firebase-admin");
|
|
|
|
module.exports = async (partyName) => {
|
|
// DELETE MESSAGES
|
|
const partyMessagesRef = admin
|
|
.firestore()
|
|
.collection("rooms")
|
|
.doc(partyName)
|
|
.collection("messages");
|
|
const partyMessagesQuery = partyMessagesRef.orderBy("time").limit(200);
|
|
await deleteCollection(partyMessagesQuery);
|
|
// DELETE USERS
|
|
const partyUsersRef = admin
|
|
.firestore()
|
|
.collection("rooms")
|
|
.doc(partyName)
|
|
.collection("users");
|
|
const partyUsersQuery = partyUsersRef.orderBy("time").limit(200);
|
|
await deleteCollection(partyUsersQuery);
|
|
// DELETE PARTY DOC
|
|
await admin.firestore().collection("rooms").doc(partyName).delete();
|
|
};
|
|
|
|
async function deleteCollection(query) {
|
|
const db = admin.firestore();
|
|
return new Promise((resolve, reject) => {
|
|
deleteQueryBatch(db, query, resolve).catch(reject);
|
|
});
|
|
}
|
|
|
|
async function deleteQueryBatch(db, query, resolve) {
|
|
const snapshot = await query.get();
|
|
const batchSize = snapshot.size;
|
|
if (batchSize === 0) {
|
|
resolve();
|
|
return;
|
|
}
|
|
const batch = admin.firestore().batch();
|
|
snapshot.docs.forEach((doc) => {
|
|
batch.delete(doc.ref);
|
|
});
|
|
await batch.commit();
|
|
process.nextTick(() => {
|
|
deleteQueryBatch(db, query, resolve);
|
|
});
|
|
}
|