37 lines
1.1 KiB
JavaScript
37 lines
1.1 KiB
JavaScript
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");
|
|
}
|