v1.6.0/speculative fix for call conflict

This commit is contained in:
2020-08-08 17:41:40 -04:00
parent f375d33311
commit 6ccf7c6201
4 changed files with 157 additions and 75 deletions
+42 -21
View File
@@ -1,16 +1,23 @@
const admin = require('firebase-admin');
const admin = require("firebase-admin");
module.exports = async (req, res) => {
const { conference, partyName, partyPin, userName, uid } = JSON.parse(req.body);
const { conference, partyName, partyPin, userName, uid } = JSON.parse(
req.body
);
// GET ROOM PIN
const [exists, roomPin, conferencePending, partyConference] = await admin
.firestore()
.collection('rooms')
.collection("rooms")
.doc(partyName)
.get()
.then((roomSnap) => {
const data = roomSnap.exists ? roomSnap.data() : {};
return [roomSnap.exists, data.pin, data.conferencePending, data.conference];
return [
roomSnap.exists,
data.pin,
data.conferencePending,
data.conference,
];
});
// CHECK IF ROOM EXISTS
if (exists === true) {
@@ -22,47 +29,61 @@ module.exports = async (req, res) => {
// UPDATE CONFERENCE DETAILS
await admin
.firestore()
.collection('rooms')
.collection("rooms")
.doc(partyName)
.update({ conference })
.catch((err) =>
res.status(500).send({ message: 'Unable to update the call details', error: 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));
.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')
.collection("rooms")
.doc(partyName)
.collection('messages')
.collection("messages")
.add({
uid: '<system>',
name: '',
uid: "<system>",
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' });
.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' });
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 });
res.status(409).send({
message: "Call already exists",
conference: partyConference,
});
}
} else {
// WRONG ROOM PIN
res.status(401).send({ message: 'Wrong party pin, try rejoining' });
res.status(401).send({ message: "Wrong party pin, try rejoining" });
}
}
} else {
// ROOM DOESN'T EXIST
res.status(404).send({ message: 'Party Not Found' });
res.status(404).send({ message: "Party Not Found" });
}
return;
};