/* eslint-disable promise/no-nesting */ const admin = require("firebase-admin"); const Logger = require("../Logger"); const mLogger = new Logger("admin", "partyDashboard"); module.exports = async (req, res) => { mLogger.start(); var partyData = await admin .firestore() .collection("rooms") .get() .then((roomSnapshot) => { const docData = []; roomSnapshot.docs.forEach((doc) => { docData.push({ id: doc.id, createTime: doc.createTime.toDate().toUTCString(), updateTime: doc.updateTime.toDate().toUTCString(), source: doc.data().player.source, onCall: doc.data().hasOwnProperty("conference"), showName: doc.data().player.showName || "", time: doc.data().player.time || 0, status: doc.data().player.status || "", }); }); return docData; }) .catch((err) => { mLogger.error("FAILED TO RESOLVE PARTIES", err); res .status(500) .send({ message: "Unable to get all parties", error: err }); }); const p = await partyData.map(async (party) => { const messageCount = await admin .firestore() .collection("rooms") .doc(party.id) .collection("messages") .get() .then((snap) => snap.size); const userCount = await admin .firestore() .collection("rooms") .doc(party.id) .collection("users") .get() .then((snap) => snap.size); party.messageCount = messageCount || 0; party.userCount = userCount || 0; return party; }); return Promise.all(p).then((v) => { mLogger.success("GOT ALL PARTIES", { parties: partyData.length }); return res.status(200).send({ partyData }); }); };