const admin = require('firebase-admin'); module.exports = async (req, res) => { const bodydata = JSON.parse(req.body); console.log('Requested Create - UID - ', bodydata.uid); if (!bodydata.userName) res.status(400).send({ message: 'Missing user name' }); if (!bodydata.roomName) res.status(400).send({ message: 'Missing party name' }); const roomNameTaken = await admin .firestore() .collection('rooms') .doc(bodydata.roomName) .get() .then((docSnap) => docSnap.exists); if (roomNameTaken) return res.status(409).send({ message: 'That party name is already taken' }); await admin .firestore() .collection('rooms') .doc(bodydata.roomName) .set({ name: bodydata.roomName, player: bodydata.player, createdAt: new Date(), updatedAt: new Date(), }) .catch((err) => { res.status(500).send({ message: 'Unable to start party.' }); console.error(err); }); await admin .firestore() .collection('rooms') .doc(bodydata.roomName) .collection('messages') .add({ uid: '', name: '', text: `${bodydata.userName} started the party.`, time: new Date(), }) .catch((err) => { console.error( `Failed to add system create party message : \n\t Room: ${bodydata.roomName}`, err ); }); await admin .firestore() .collection('rooms') .doc(bodydata.roomName) .collection('users') .doc(bodydata.uid) .set({ admin: true, name: bodydata.userName, }) .catch((err) => { console.error( `Failed to set admin when creating party : \n\t Room: ${bodydata.roomName} \n\t User: ${bodydata.uid}`, err ); }); res.status(201).send({ roomId: bodydata.roomName, message: 'Started a party!' }); };