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
+59 -19
View File
@@ -1,30 +1,70 @@
const admin = require('firebase-admin');
const admin = require("firebase-admin");
module.exports = async (req, res) => {
console.info(`[START]\tWEBHOOKS/Conference End\nID:${req.body.conference.confId}\nParty:${req.body.conference.confAlias}`);
if (req.body.eventType === 'Conference.Ended') {
console.info(
`[START]\tWEBHOOKS/Conference End\tID:${req.body.conference.confId}\tParty:${req.body.conference.confAlias}`
);
// MAKE SURE CORRECT EVENT TYPE
if (req.body.eventType === "Conference.Ended") {
// MAKE SURE IT'S NOT A DUPLICATE FROM CREATE CONFLICT
if (req.body.participants.length > 0) {
if (req.body.confAlias.startsWith('AUTODELETE_')) {
// MAKE SURE ELIGIBLE FOR DELETE
if (req.body.confAlias.startsWith("AUTODELETE_")) {
const partyName = req.body.confAlias.replace(/AUTODELETE_/, "");
admin.firestore()
.collection('rooms')
.doc(partyName)
.update({ conference: admin.firestore.FieldValue.delete() })
.then(() => {
console.info(`[DONE]\tWEBHOOKS/Conference End\nID:${req.body.conference.confId}\nParty:${req.body.conference.confAlias}`);
return;
})
.catch(err => {
console.error(`[ERROR]\tWEBHOOKS/Conference End/Firebase Error\nID:${req.body.conference.confId}\nParty:${req.body.conference.confAlias}\nError:${JSON.stringify(err)}`)
});
res.status(200).send({ message: 'Processed conference end'});
const existingConference = await admin
.firestore()
.collection("rooms")
.doc(partyName)
.get()
.then((snap) => (snap.exists ? snap.data().conference : null));
// MAKE SURE EXISTS AND HAS NOT BEEN REPLACED
if (
existingConference &&
existingConference._id === req.body.conference.confId
) {
// REMOVE CONFERENCE DETAILS
await admin
.firestore()
.collection("rooms")
.doc(partyName)
.update({ conference: admin.firestore.FieldValue.delete() })
.then(() => {
console.info(
`[DONE]\tWEBHOOKS/Conference End\tID:${req.body.conference.confId}\tParty:${req.body.conference.confAlias}`
);
return;
})
.catch((err) => {
console.error(
`[ERROR]\tWEBHOOKS/Conference End/Firebase Error\tID:${
req.body.conference.confId
}\tParty:${
req.body.conference.confAlias
}\tError:${JSON.stringify(err)}`
);
});
} else {
console.info(
`[DONE]\tWEBHOOKS/Conference End/Conference Was Already Replaced\tID:${req.body.conference.confId}\tParty:${req.body.conference.confAlias}`
);
}
res.status(200).send({ message: "Processed conference end" });
} else {
console.info(
`[DONE]\tWEBHOOKS/Conference End/Not Eligible For Autodelete\tID:${req.body.conference.confId}\tParty:${req.body.conference.confAlias}`
);
res.status(200).send({ message: "Processed conference end" });
}
} else {
console.info(`[DONE]\tWEBHOOKS/Conference End/End Of Duplicate Conference\nID:${req.body.conference.confId}\nParty:${req.body.conference.confAlias}`);
console.info(
`[DONE]\tWEBHOOKS/Conference End/End Of Duplicate Conference\tID:${req.body.conference.confId}\tParty:${req.body.conference.confAlias}`
);
}
} else {
console.error(`[ERROR]\tWEBHOOKS/Conference End/Wrong Event Type\nID:${req.body.conference.confId}\nParty:${req.body.conference.confAlias}`)
res.status(400).send({ message: 'Wrong event type' });
console.error(
`[ERROR]\tWEBHOOKS/Conference End/Wrong Event Type\tID:${req.body.conference.confId}\tParty:${req.body.conference.confAlias}`
);
res.status(400).send({ message: "Wrong event type" });
}
return;
};