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); deleteCollection(partyMessagesQuery); // DELETE USERS const partyUsersRef = admin .firestore() .collection("rooms") .doc(partyName) .collection("messages"); const partyUsersQuery = partyUsersRef.orderBy("time").limit(200); deleteCollection(partyUsersQuery); // DELETE PARTY DOC 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); }); }