From db042db54006d731e403ef16d314313a4559e516 Mon Sep 17 00:00:00 2001 From: lukew3 Date: Sat, 22 May 2021 11:15:58 -0400 Subject: [PATCH] more index cleaning --- backend/server.js | 8 + functions/index.js | 263 --------------------------- functions/non-cloud-functions.js | 40 ----- functions/non-migrated.js | 295 +++++++++++++++++++++++++++++++ 4 files changed, 303 insertions(+), 303 deletions(-) delete mode 100644 functions/non-cloud-functions.js create mode 100644 functions/non-migrated.js diff --git a/backend/server.js b/backend/server.js index c66294518..4a3e7d492 100644 --- a/backend/server.js +++ b/backend/server.js @@ -499,6 +499,14 @@ app.get("/api/fetchSnapshot", authenticateToken, (req, res) => { }); }); +function stdDev(array) { + const n = array.length; + const mean = array.reduce((a, b) => a + b) / n; + return Math.sqrt( + array.map((x) => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n + ); +} + app.post("/api/testCompleted", authenticateToken, (req, res) => { //return createdId //return user data diff --git a/functions/index.js b/functions/index.js index ed27d5e18..cc29e3db8 100644 --- a/functions/index.js +++ b/functions/index.js @@ -18,94 +18,6 @@ const db = admin.firestore(); const auth = admin.auth(); const fetch = require("node-fetch"); -async function getAllNames() { - // return admin - // .auth() - // .listUsers() - // .then((data) => { - // let names = []; - // data.users.forEach((user) => { - // names.push(user.displayName); - // }); - // return names; - // }); - - let ret = []; - - async function getAll(nextPageToken) { - // List batch of users, 1000 at a time. - let listUsersResult = await admin.auth().listUsers(1000, nextPageToken); - for (let i = 0; i < listUsersResult.users.length; i++) { - ret.push(listUsersResult.users[i].displayName); - } - if (listUsersResult.pageToken) { - // List next batch of users. - await getAll(listUsersResult.pageToken); - } - } - - await getAll(); - return ret; -} - -async function getAllUsers() { - // return admin - // .auth() - // .listUsers() - // .then((data) => { - // let names = []; - // data.users.forEach((user) => { - // names.push(user.displayName); - // }); - // return names; - // }); - - let ret = []; - - async function getAll(nextPageToken) { - // List batch of users, 1000 at a time. - let listUsersResult = await auth.listUsers(1000, nextPageToken); - for (let i = 0; i < listUsersResult.users.length; i++) { - let loopuser = listUsersResult.users[i]; - - //if custom claim is undefined check, if its true then ignore - - // if (loopuser === undefined || loopuser.customClaims === undefined || loopuser.customClaims['nameChecked'] === undefined) { - ret.push(listUsersResult.users[i]); - // } - - // console.log(loopuser.customClaims['asd']); - - // let userdata = await db.collection('users').doc(listUsersResult.users[i].uid).get(); - - // let data = userdata.data(); - - // if (data === undefined || data.needsToChangeName === undefined) { - // // console.log(data); - // ret.push(listUsersResult.users[i]); - // // console.log('user added'); - // } else { - // // console.log('user already added'); - // } - } - if (listUsersResult.pageToken) { - // List next batch of users. - await getAll(listUsersResult.pageToken); - } - } - await getAll(); - return ret; -} - -function isUsernameValid(name) { - if (name === null || name === undefined || name === "") return false; - if (/miodec/.test(name.toLowerCase())) return false; - if (/bitly/.test(name.toLowerCase())) return false; - if (name.length > 14) return false; - if (/^\..*/.test(name.toLowerCase())) return false; - return /^[0-9a-zA-Z_.-]+$/.test(name); -} - exports.changeDisplayName = functions.https.onCall( async (request, response) => { try { @@ -350,14 +262,6 @@ exports.clearTagPb = functions.https.onCall((request, response) => { } }); -function stdDev(array) { - const n = array.length; - const mean = array.reduce((a, b) => a + b) / n; - return Math.sqrt( - array.map((x) => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n - ); -} - exports.verifyUser = functions.https.onRequest(async (request, response) => { response.set("Access-Control-Allow-Origin", origin); response.set("Access-Control-Allow-Headers", "*"); @@ -465,97 +369,6 @@ async function getUpdatedLbMemory(userdata, mode, mode2, globallb, dailylb) { return lbmemory; } -async function incrementTestCounter(uid, userData) { - try { - if (userData.completedTests === undefined) { - let results = await db.collection(`users/${uid}/results`).get(); - let count = results.docs.length; - db.collection("users") - .doc(uid) - .update({ - completedTests: admin.firestore.FieldValue.increment(count), - }); - db.collection("public") - .doc("stats") - .update({ - completedTests: admin.firestore.FieldValue.increment(count), - }); - } else { - db.collection("users") - .doc(uid) - .update({ completedTests: admin.firestore.FieldValue.increment(1) }); - db.collection("public") - .doc("stats") - .update({ completedTests: admin.firestore.FieldValue.increment(1) }); - } - } catch (e) { - console.error( - `Error while incrementing completed tests for user ${uid}: ${e}` - ); - } -} - -async function incrementStartedTestCounter(uid, num, userData) { - try { - if (userData.startedTests === undefined) { - let stepSize = 1000; - let results = []; - let query = await db - .collection(`users/${uid}/results`) - .orderBy("timestamp", "desc") - .limit(stepSize) - .get(); - let lastDoc; - while (query.docs.length > 0) { - lastDoc = query.docs[query.docs.length - 1]; - query.docs.forEach((doc) => { - results.push({ restartCount: doc.data().restartCount }); - }); - query = await db - .collection(`users/${uid}/results`) - .orderBy("timestamp", "desc") - .limit(stepSize) - .startAfter(lastDoc) - .get(); - } - - let count = 0; - results.forEach((result) => { - try { - let rc = result.restartCount; - if (rc === undefined) { - rc = 0; - } - - count += parseInt(rc); - } catch (e) {} - }); - count += results.length; - db.collection("users") - .doc(uid) - .update({ - startedTests: admin.firestore.FieldValue.increment(count), - }); - db.collection("public") - .doc("stats") - .update({ - startedTests: admin.firestore.FieldValue.increment(count), - }); - } else { - db.collection("users") - .doc(uid) - .update({ startedTests: admin.firestore.FieldValue.increment(num) }); - db.collection("public") - .doc("stats") - .update({ startedTests: admin.firestore.FieldValue.increment(num) }); - } - } catch (e) { - console.error( - `Error while incrementing started tests for user ${uid}: ${e}` - ); - } -} - exports.updateEmail = functions.https.onCall(async (request, response) => { try { let previousEmail = await admin.auth().getUser(request.uid); @@ -1436,73 +1249,6 @@ exports.getLeaderboard = functions.https.onCall((request, response) => { }); }); -exports.scheduledFunctionCrontab = functions.pubsub - .schedule("00 00 * * *") - .timeZone("Africa/Abidjan") - .onRun((context) => { - try { - console.log("moving daily leaderboards to history"); - db.collection("leaderboards") - .where("type", "==", "daily") - .get() - .then(async (res) => { - for (let i = 0; i < res.docs.length; i++) { - let doc = res.docs[i]; - - let lbdata = doc.data(); - - let winnerUid = lbdata.board[0].uid; - await db - .collection("users") - .doc(winnerUid) - .get() - .then(async (userDoc) => { - let userData = userDoc.data(); - let lbwins = userData.dailyLbWins; - - let lbname = lbdata.mode + lbdata.mode2; - - if (lbwins === undefined) { - //first win ever - lbwins = { - [lbname]: 1, - }; - } else { - //object already exists - if (lbwins[lbname] === undefined) { - lbwins[lbname] = 1; - } else { - lbwins[lbname] = lbwins[lbname] + 1; - } - } - await db.collection("users").doc(winnerUid).update({ - dailyLbWins: lbwins, - }); - }); - - announceDailyLbResult(lbdata); - t = new Date(); - // db.collection("leaderboards_history") - // .doc( - // `${t.getUTCDate()}_${t.getUTCMonth()}_${t.getUTCFullYear()}_${ - // lbdata.mode - // }_${lbdata.mode2}` - // ) - // .set(lbdata); - db.collection("leaderboards").doc(doc.id).set( - { - board: [], - }, - { merge: true } - ); - } - }); - return null; - } catch (e) { - console.error(`error while moving daily leaderboards to history - ${e}`); - } - }); - async function announceLbUpdate(discordId, pos, lb, wpm, raw, acc, con) { db.collection("bot-commands").add({ command: "sayLbUpdate", @@ -1511,12 +1257,3 @@ async function announceLbUpdate(discordId, pos, lb, wpm, raw, acc, con) { requestTimestamp: Date.now(), }); } - -async function announceDailyLbResult(lbdata) { - db.collection("bot-commands").add({ - command: "announceDailyLbResult", - arguments: [lbdata], - executed: false, - requestTimestamp: Date.now(), - }); -} diff --git a/functions/non-cloud-functions.js b/functions/non-cloud-functions.js deleted file mode 100644 index f1372eef1..000000000 --- a/functions/non-cloud-functions.js +++ /dev/null @@ -1,40 +0,0 @@ -exports.requestTest = functions.https.onRequest((request, response) => { - response.set("Access-Control-Allow-Origin", origin); - response.set("Access-Control-Allow-Headers", "*"); - response.set("Access-Control-Allow-Credentials", "true"); - response.status(200).send({ data: "test" }); -}); - -exports.getPatreons = functions.https.onRequest(async (request, response) => { - response.set("Access-Control-Allow-Origin", origin); - response.set("Access-Control-Allow-Headers", "*"); - response.set("Access-Control-Allow-Credentials", "true"); - if (request.method === "OPTIONS") { - // Send response to OPTIONS requests - response.set("Access-Control-Allow-Methods", "POST, GET, OPTIONS"); - response.set("Access-Control-Allow-Headers", "Authorization,Content-Type"); - response.set("Access-Control-Max-Age", "3600"); - response.status(204).send(""); - return; - } - request = request.body.data; - try { - let patreon = await db.collection("patreon").doc("patreons").get(); - let data = patreon.data().list; - - data = data.sort((a, b) => { - return b.value - a.value; - }); - - let ret = []; - data.forEach((pdoc) => { - ret.push(pdoc.name); - }); - - response.status(200).send({ data: ret }); - return; - } catch (e) { - response.status(200).send({ e }); - return; - } -}); diff --git a/functions/non-migrated.js b/functions/non-migrated.js new file mode 100644 index 000000000..867afea26 --- /dev/null +++ b/functions/non-migrated.js @@ -0,0 +1,295 @@ +exports.requestTest = functions.https.onRequest((request, response) => { + response.set("Access-Control-Allow-Origin", origin); + response.set("Access-Control-Allow-Headers", "*"); + response.set("Access-Control-Allow-Credentials", "true"); + response.status(200).send({ data: "test" }); +}); + +exports.getPatreons = functions.https.onRequest(async (request, response) => { + response.set("Access-Control-Allow-Origin", origin); + response.set("Access-Control-Allow-Headers", "*"); + response.set("Access-Control-Allow-Credentials", "true"); + if (request.method === "OPTIONS") { + // Send response to OPTIONS requests + response.set("Access-Control-Allow-Methods", "POST, GET, OPTIONS"); + response.set("Access-Control-Allow-Headers", "Authorization,Content-Type"); + response.set("Access-Control-Max-Age", "3600"); + response.status(204).send(""); + return; + } + request = request.body.data; + try { + let patreon = await db.collection("patreon").doc("patreons").get(); + let data = patreon.data().list; + + data = data.sort((a, b) => { + return b.value - a.value; + }); + + let ret = []; + data.forEach((pdoc) => { + ret.push(pdoc.name); + }); + + response.status(200).send({ data: ret }); + return; + } catch (e) { + response.status(200).send({ e }); + return; + } +}); + +async function getAllNames() { + // return admin + // .auth() + // .listUsers() + // .then((data) => { + // let names = []; + // data.users.forEach((user) => { + // names.push(user.displayName); + // }); + // return names; + // }); + + let ret = []; + + async function getAll(nextPageToken) { + // List batch of users, 1000 at a time. + let listUsersResult = await admin.auth().listUsers(1000, nextPageToken); + for (let i = 0; i < listUsersResult.users.length; i++) { + ret.push(listUsersResult.users[i].displayName); + } + if (listUsersResult.pageToken) { + // List next batch of users. + await getAll(listUsersResult.pageToken); + } + } + + await getAll(); + return ret; +} + +async function getAllUsers() { + // return admin + // .auth() + // .listUsers() + // .then((data) => { + // let names = []; + // data.users.forEach((user) => { + // names.push(user.displayName); + // }); + // return names; + // }); + + let ret = []; + + async function getAll(nextPageToken) { + // List batch of users, 1000 at a time. + let listUsersResult = await auth.listUsers(1000, nextPageToken); + for (let i = 0; i < listUsersResult.users.length; i++) { + let loopuser = listUsersResult.users[i]; + + //if custom claim is undefined check, if its true then ignore + + // if (loopuser === undefined || loopuser.customClaims === undefined || loopuser.customClaims['nameChecked'] === undefined) { + ret.push(listUsersResult.users[i]); + // } + + // console.log(loopuser.customClaims['asd']); + + // let userdata = await db.collection('users').doc(listUsersResult.users[i].uid).get(); + + // let data = userdata.data(); + + // if (data === undefined || data.needsToChangeName === undefined) { + // // console.log(data); + // ret.push(listUsersResult.users[i]); + // // console.log('user added'); + // } else { + // // console.log('user already added'); + // } + } + if (listUsersResult.pageToken) { + // List next batch of users. + await getAll(listUsersResult.pageToken); + } + } + await getAll(); + return ret; +} + +function isUsernameValid(name) { + if (name === null || name === undefined || name === "") return false; + if (/miodec/.test(name.toLowerCase())) return false; + if (/bitly/.test(name.toLowerCase())) return false; + if (name.length > 14) return false; + if (/^\..*/.test(name.toLowerCase())) return false; + return /^[0-9a-zA-Z_.-]+$/.test(name); +} + +async function incrementTestCounter(uid, userData) { + try { + if (userData.completedTests === undefined) { + let results = await db.collection(`users/${uid}/results`).get(); + let count = results.docs.length; + db.collection("users") + .doc(uid) + .update({ + completedTests: admin.firestore.FieldValue.increment(count), + }); + db.collection("public") + .doc("stats") + .update({ + completedTests: admin.firestore.FieldValue.increment(count), + }); + } else { + db.collection("users") + .doc(uid) + .update({ completedTests: admin.firestore.FieldValue.increment(1) }); + db.collection("public") + .doc("stats") + .update({ completedTests: admin.firestore.FieldValue.increment(1) }); + } + } catch (e) { + console.error( + `Error while incrementing completed tests for user ${uid}: ${e}` + ); + } +} + +async function incrementStartedTestCounter(uid, num, userData) { + try { + if (userData.startedTests === undefined) { + let stepSize = 1000; + let results = []; + let query = await db + .collection(`users/${uid}/results`) + .orderBy("timestamp", "desc") + .limit(stepSize) + .get(); + let lastDoc; + while (query.docs.length > 0) { + lastDoc = query.docs[query.docs.length - 1]; + query.docs.forEach((doc) => { + results.push({ restartCount: doc.data().restartCount }); + }); + query = await db + .collection(`users/${uid}/results`) + .orderBy("timestamp", "desc") + .limit(stepSize) + .startAfter(lastDoc) + .get(); + } + + let count = 0; + results.forEach((result) => { + try { + let rc = result.restartCount; + if (rc === undefined) { + rc = 0; + } + + count += parseInt(rc); + } catch (e) {} + }); + count += results.length; + db.collection("users") + .doc(uid) + .update({ + startedTests: admin.firestore.FieldValue.increment(count), + }); + db.collection("public") + .doc("stats") + .update({ + startedTests: admin.firestore.FieldValue.increment(count), + }); + } else { + db.collection("users") + .doc(uid) + .update({ startedTests: admin.firestore.FieldValue.increment(num) }); + db.collection("public") + .doc("stats") + .update({ startedTests: admin.firestore.FieldValue.increment(num) }); + } + } catch (e) { + console.error( + `Error while incrementing started tests for user ${uid}: ${e}` + ); + } +} + +exports.scheduledFunctionCrontab = functions.pubsub + .schedule("00 00 * * *") + .timeZone("Africa/Abidjan") + .onRun((context) => { + try { + console.log("moving daily leaderboards to history"); + db.collection("leaderboards") + .where("type", "==", "daily") + .get() + .then(async (res) => { + for (let i = 0; i < res.docs.length; i++) { + let doc = res.docs[i]; + + let lbdata = doc.data(); + + let winnerUid = lbdata.board[0].uid; + await db + .collection("users") + .doc(winnerUid) + .get() + .then(async (userDoc) => { + let userData = userDoc.data(); + let lbwins = userData.dailyLbWins; + + let lbname = lbdata.mode + lbdata.mode2; + + if (lbwins === undefined) { + //first win ever + lbwins = { + [lbname]: 1, + }; + } else { + //object already exists + if (lbwins[lbname] === undefined) { + lbwins[lbname] = 1; + } else { + lbwins[lbname] = lbwins[lbname] + 1; + } + } + await db.collection("users").doc(winnerUid).update({ + dailyLbWins: lbwins, + }); + }); + + announceDailyLbResult(lbdata); + t = new Date(); + // db.collection("leaderboards_history") + // .doc( + // `${t.getUTCDate()}_${t.getUTCMonth()}_${t.getUTCFullYear()}_${ + // lbdata.mode + // }_${lbdata.mode2}` + // ) + // .set(lbdata); + db.collection("leaderboards").doc(doc.id).set( + { + board: [], + }, + { merge: true } + ); + } + }); + return null; + } catch (e) { + console.error(`error while moving daily leaderboards to history - ${e}`); + } + }); + +async function announceDailyLbResult(lbdata) { + db.collection("bot-commands").add({ + command: "announceDailyLbResult", + arguments: [lbdata], + executed: false, + requestTimestamp: Date.now(), + }); +}