const admin = require("firebase-admin"); const { onDocumentWritten } = require("firebase-functions/firestore"); const { refList } = require("../index"); const { getSunoTimestamps } = require("./lyrics"); const { deleteFolder } = require("../helpers/firebase"); exports.onProjectUpdate = onDocumentWritten( "projects/{projectId}", async (projectSnap) => { try { const { projectId } = projectSnap.params; const currentData = projectSnap?.data?.after?.data() || null; const previousData = projectSnap?.data?.before?.data() || null; if (!previousData?.songUrl && currentData?.songUrl) { await getSunoTimestamps(projectId); } if (!currentData) { const { userId } = previousData || {}; //delete folder await deleteFolder(`users/${userId}/projects/${projectId}/`); //delete tasks const snapshot = await refList.tasks .where("projectId", "==", projectId) .get(); if (snapshot.empty) return null; const batch = admin.firestore().batch(); snapshot.forEach((doc) => { batch.delete(doc.ref); }); await batch.commit(); } else { if (previousData) { // edit if (!previousData?.songUrl && currentData?.songUrl) { await refList.projects.doc(projectId).update({ hasSong: true, }); } if (!previousData?.playbackUrl && currentData?.playbackUrl) { await refList.projects.doc(projectId).update({ hasPlayback: true, }); } } } } catch (e) { console.log(e); } } );