Добавить функцию:
exports.newCampaign = functions.https.onCall((data, context) => {
// get adventurer information
const campaignName = data.campaignName;
const timestamp = data.timestamp;
const uid = context.auth.token.uid || null;
// create a new document for the campaign
var query = admin.firestore().collection(`Adventurers/${uid}/campaigns`).add({
locations: [],
name: campaignName
})
.then((docRef) => {
admin.firestore().collection('Adventurers').doc(uid).update({
[`campaignList.${docRef.id}`]: {
id: docRef.id,
name: campaignName,
timestamp: timestamp
}
});
return {
id: docRef.id
};
})
.catch((error) => {
return {
error: "Error adding document: " + error
};
});
return query;
});
Когда я вызываю это, коллекция Adventurers.uid.campaigns получает новый документ с идентификатором кампании, а Adventurers.uid.campaignList получает атрибут, называемый идентификатором кампании. Работает как положено
Удалить функцию:
exports.deleteCampaign = functions.https.onCall((data, context) => {
// get adventurer information
const campaignId = data.campaignId;
const uid = context.auth.token.uid || null;
// delete the document for the campaign
var query = admin.firestore().collection(`Adventurers/${uid}/campaigns`).doc(campaignId).delete()
.then((docRef) => {
// delete campaign from the campaign list
admin.firestore().collection('Adventurers').doc(uid).update({
[`campaignList.${campaignId}`]: Firebase.firestore.FieldValue.delete()
});
return {};
})
.catch((error) => {
return {
error: "Error removing document: " + error
};
});
return query;
});
Когда я вызываю это, документ в коллекции кампаний удаляется, но поле в списке кампаний не удаляется. Не работает должным образом. Поскольку документ был успешно удален, я знаю, что функция получает правильный идентификатор кампании. Я пытаюсь удалить точно так же, как добавил, так почему же это не работает?