const admin = require("firebase-admin"); module.exports = async (req, res) => { const { conference, partyName, partyPin, userName, uid } = JSON.parse( req.body ); // GET ROOM PIN const [exists, roomPin, conferencePending, partyConference] = await admin .firestore() .collection("rooms") .doc(partyName) .get() .then((roomSnap) => { const data = roomSnap.exists ? roomSnap.data() : {}; return [ roomSnap.exists, data.pin, data.conferencePending, data.conference, ]; }); // CHECK IF ROOM EXISTS if (exists === true) { if (roomPin) { // CHECK FOR CORRECT PIN if (roomPin === partyPin) { if (conferencePending) { if (conferencePending === uid) { // UPDATE CONFERENCE DETAILS await admin .firestore() .collection("rooms") .doc(partyName) .update({ conference }) .catch((err) => res.status(500).send({ message: "Unable to update the call details", error: err, }) ); // REMOVE PENDING STATUS await admin .firestore() .collection("rooms") .doc(partyName) .update({ conferencePending: admin.firestore.FieldValue.delete(), }) .catch((err) => console.error("Failed to remove pending status", err) ); // ADD SYSTEM MESSAGE await admin .firestore() .collection("rooms") .doc(partyName) .collection("messages") .add({ uid: "", name: "", text: `${userName} started the call, everyone can join now.`, time: new Date(), }) .catch((err) => console.error("Failed to add update conference message", err) ); res.status(200).send({ message: "Started the conference" }); } else { res.status(409).send({ message: "Looks like someone is already starting a call", }); } } else if (partyConference) { res.status(409).send({ message: "Call already exists", conference: partyConference, }); } } else { // WRONG ROOM PIN res.status(401).send({ message: "Wrong party pin, try rejoining" }); } } } else { // ROOM DOESN'T EXIST res.status(404).send({ message: "Party Not Found" }); } return; };