Files
musicland/functions/src/project.js
T

56 lines
1.6 KiB
JavaScript

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);
}
}
);