const admin = require("firebase-admin"); const { onDocumentDeleted } = require("firebase-functions/firestore"); const { refList } = require("../index"); const { deleteFolder } = require("../helpers/firebase"); exports.onUserDelete = onDocumentDeleted("users/{userID}", async (event) => { try { const userID = event?.params?.userID; await clearAllUserData(userID); await deleteFolder(`users/${userID}/`); await admin.auth().deleteUser(userID); console.log(`User ${userID} deleted successfully`); } catch (e) { console.log(e); } }); async function clearAllUserData(userID) { const deleteAll = async (ref, key, operator = "==") => { const snapshot = await ref.where(key, operator, userID).get(); snapshot.forEach((item) => item.ref.delete()); }; const removeFromArray = async (ref, arrayName) => { const snapshot = await ref.where(arrayName, "array-contains", userID).get(); snapshot.forEach((item) => item.ref.update({ [arrayName]: admin.firestore.FieldValue.arrayRemove(userID), }), ); }; await deleteAll(refList.projects, "userId"); await deleteAll(refList.playlists, "createdBy"); }