From 732bd6887ce4f7a5e28969f739409b2f2f9a6171 Mon Sep 17 00:00:00 2001 From: Ayushya Amitabh Date: Wed, 21 Apr 2021 23:10:39 -0400 Subject: [PATCH] v1.1.0/release functions (fix lint, build, ignore script) --- firebase.json | 5 +- functions/.eslintrc.js | 1 + functions/{src => scripts}/updateCounts.js | 3 +- functions/src/index.ts | 102 ++++++++++++--------- 4 files changed, 63 insertions(+), 48 deletions(-) rename functions/{src => scripts}/updateCounts.js (98%) diff --git a/firebase.json b/firebase.json index d488395..985835b 100644 --- a/firebase.json +++ b/firebase.json @@ -50,7 +50,10 @@ "npm --prefix \"$RESOURCE_DIR\" run lint", "npm --prefix \"$RESOURCE_DIR\" run build" ], - "source": "functions" + "source": "functions", + "ignore": [ + "functions/scripts" + ] }, "emulators": { "functions": { diff --git a/functions/.eslintrc.js b/functions/.eslintrc.js index a6aff2e..9bae958 100644 --- a/functions/.eslintrc.js +++ b/functions/.eslintrc.js @@ -20,6 +20,7 @@ module.exports = { }, ignorePatterns: [ "/lib/**/*", // Ignore built files. + "/scripts/**/*", // Ignore scripts ], plugins: ["@typescript-eslint", "import"], rules: { diff --git a/functions/src/updateCounts.js b/functions/scripts/updateCounts.js similarity index 98% rename from functions/src/updateCounts.js rename to functions/scripts/updateCounts.js index 3d561c0..40f8898 100644 --- a/functions/src/updateCounts.js +++ b/functions/scripts/updateCounts.js @@ -1,6 +1,5 @@ - const admin = require("firebase-admin"); -const firebaseSecret = require("./firebaseSecret.json"); +const firebaseSecret = require("../src/firebaseSecret.json"); admin.initializeApp({ diff --git a/functions/src/index.ts b/functions/src/index.ts index cc0fb8f..ea51574 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -46,15 +46,17 @@ const VAX_AGES: Record> = { }; type SaveResultRequestData = { - name: string; - age: string; - dose: string; - gid: string; + name?: string; + age?: string; + dose?: string; + gid?: string; } & { [x: string]: boolean; +} & { + [y: string]: Record; }; -const serializeGaId = (_gaid: string): string => { +const serializeGaId = (_gaid: string | undefined): string => { if (_gaid) { return _gaid.split(".").join("|"); } @@ -62,7 +64,7 @@ const serializeGaId = (_gaid: string): string => { }; const addResultToStats = async (data: SaveResultRequestData) => { - const cleanData: Record = Object.assign({}, data); + const cleanData: SaveResultRequestData = Object.assign({}, data); delete cleanData.name; delete cleanData.dose; delete cleanData.age; @@ -109,11 +111,13 @@ const addResultToStats = async (data: SaveResultRequestData) => { ] = admin.firestore.FieldValue.increment(1); }); } - admin.firestore().collection("stats").doc(data.name).update(updateDoc); + if (data.name) { + admin.firestore().collection("stats").doc(data.name).update(updateDoc); + } }; const removeResultFromStats = async (data: FirebaseFirestore.DocumentData) => { - const cleanData: Record = Object.assign({}, data); + const cleanData: SaveResultRequestData = Object.assign({}, data); delete cleanData.name; delete cleanData.dose; delete cleanData.age; @@ -218,28 +222,30 @@ export const getStatsV1 = functions.https.onCall(async () => { export const saveResultV1 = functions.https.onCall( async (data: SaveResultRequestData, context) => { if (!!data && !!context) { - const {gid} = data; - // Get existing result - const existingResult = await admin - .firestore() - .collection("results") - .doc(serializeGaId(gid)) - .get() - .then((docSnap) => docSnap.data()); - // Update user result - const cleanData: Record = Object.assign({}, data); - delete cleanData.gid; - await admin - .firestore() - .collection("results") - .doc(serializeGaId(gid)) - .set(cleanData); - // No existing result - if (existingResult === undefined) { - await addResultToStats(data); - } else { - await removeResultFromStats(existingResult); - await addResultToStats(data); + if (!!data.name && !!data.age && !!data.gid) { + const {gid} = data; + // Get existing result + const existingResult = await admin + .firestore() + .collection("results") + .doc(serializeGaId(gid)) + .get() + .then((docSnap) => docSnap.data()); + // Update user result + const cleanData: SaveResultRequestData = Object.assign({}, data); + delete cleanData.gid; + await admin + .firestore() + .collection("results") + .doc(serializeGaId(gid)) + .set(cleanData); + // No existing result + if (existingResult === undefined) { + await addResultToStats(data); + } else { + await removeResultFromStats(existingResult); + await addResultToStats(data); + } } } } @@ -370,11 +376,13 @@ export const saveResult = functions.https.onCall( ] = admin.firestore.FieldValue.increment(incrementValue); } }); - admin - .firestore() - .collection("stats") - .doc(data.name) - .update(updateDoc); + if (data.name) { + admin + .firestore() + .collection("stats") + .doc(data.name) + .update(updateDoc); + } } else if ( existingData !== undefined && existingData !== docData && @@ -429,11 +437,13 @@ export const saveResult = functions.https.onCall( } } }); - admin - .firestore() - .collection("stats") - .doc(data.name) - .update(updateDoc); + if (data.name) { + admin + .firestore() + .collection("stats") + .doc(data.name) + .update(updateDoc); + } } else if (existingData === undefined) { // DATA DOESN'T EXIST FOR USER // SAVE USER DATA @@ -459,11 +469,13 @@ export const saveResult = functions.https.onCall( } } }); - admin - .firestore() - .collection("stats") - .doc(data.name) - .update(updateDoc); + if (data.name) { + admin + .firestore() + .collection("stats") + .doc(data.name) + .update(updateDoc); + } } } }