From 3f5af730d49338216750a0e7966816f7545577c2 Mon Sep 17 00:00:00 2001 From: lukew3 Date: Sat, 22 May 2021 11:09:17 -0400 Subject: [PATCH] resetPersonalBests and index.js cleaning --- backend/mongo-todo.md | 2 + backend/server.js | 15 +++ functions/index.js | 170 ------------------------------- functions/non-cloud-functions.js | 40 ++++++++ src/js/simple-popups.js | 6 +- 5 files changed, 59 insertions(+), 174 deletions(-) create mode 100644 functions/non-cloud-functions.js diff --git a/backend/mongo-todo.md b/backend/mongo-todo.md index 539e94f32..20c9ca049 100644 --- a/backend/mongo-todo.md +++ b/backend/mongo-todo.md @@ -16,6 +16,8 @@ - Should be a setting in the .env +- Are personal bests calculated from actual result data? + - Setting a low pb after resetting personal bests doesn't register on the scoreboard - make sure refresh token won't expire - make refresh token expire after session if don't remeber me is set? - Keep jwt and refresh in cookies? diff --git a/backend/server.js b/backend/server.js index b04b65bb5..c66294518 100644 --- a/backend/server.js +++ b/backend/server.js @@ -1361,6 +1361,21 @@ app.post("/api/removeTag", authenticateToken, (req, res) => { } }); +app.post("/api/resetPersonalBests", authenticateToken, (req, res) => { + try { + User.findOne({ name: req.name }, (err, user) => { + if (err) res.status(500).send({ error: err }); + user.personalBests = {}; + user.save(); + }); + return true; + } catch (e) { + console.log( + `something went wrong when deleting personal bests for ${uid}: ${e.message}` + ); + return false; + } +}); // ANALYTICS API function newAnalyticsEvent(event, data) { diff --git a/functions/index.js b/functions/index.js index 1e142fc20..ed27d5e18 100644 --- a/functions/index.js +++ b/functions/index.js @@ -106,30 +106,6 @@ function isUsernameValid(name) { return /^[0-9a-zA-Z_.-]+$/.test(name); } -exports.reserveDisplayName = functions.https.onCall( - async (request, response) => { - try { - let udata = await db.collection("users").doc(request.uid).get(); - udata = udata.data(); - if (request.name.toLowerCase() === udata.name.toLowerCase()) { - db.collection("takenNames").doc(request.name.toLowerCase()).set( - { - taken: true, - }, - { merge: true } - ); - console.log(`Reserved name ${request.name}`); - } else { - console.error( - `Could not reserve name. ${request.name.toLowerCase()} != ${udata.name.toLowerCase()}` - ); - } - } catch (e) { - console.error(`Could not reserve name. ${e}`); - } - } -); - exports.changeDisplayName = functions.https.onCall( async (request, response) => { try { @@ -168,94 +144,6 @@ exports.changeDisplayName = functions.https.onCall( } ); -exports.clearName = functions.auth.user().onDelete((user) => { - db.collection("takenNames").doc(user.displayName.toLowerCase()).delete(); - db.collection("users").doc(user.uid).delete(); -}); - -exports.checkNameAvailability = functions.https.onRequest( - async (request, response) => { - response.set("Access-Control-Allow-Origin", origin); - 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; - - // 1 - available - // -1 - unavailable (taken) - // -2 - not valid name - // -999 - unknown error - try { - if (!isUsernameValid(request.name)) { - response.status(200).send({ - data: { - resultCode: -2, - message: "Username is not valid", - }, - }); - return; - } - - let takendata = await db - .collection("takenNames") - .doc(request.name.toLowerCase()) - .get(); - - takendata = takendata.data(); - - if (takendata !== undefined && takendata.taken) { - response.status(200).send({ - data: { - resultCode: -1, - message: "Username is taken", - }, - }); - return; - } else { - response.status(200).send({ - data: { - resultCode: 1, - message: "Username is available", - }, - }); - return; - } - - // return getAllNames().then((data) => { - // let available = 1; - // data.forEach((name) => { - // try { - // if (name.toLowerCase() === request.name.toLowerCase()) available = -1; - // } catch (e) { - // // - // } - // }); - // return available; - // }); - } catch (e) { - console.error( - `Error while checking name availability for ${request.name}:` + - e.message - ); - response.status(200).send({ - data: { - resultCode: -999, - message: "Unexpected error: " + e, - }, - }); - return; - } - } -); - exports.removeSmallTestsAndQPB = functions.https.onCall( async (request, response) => { let uid = request.uid; @@ -304,23 +192,6 @@ exports.removeSmallTestsAndQPB = functions.https.onCall( } ); -exports.resetPersonalBests = functions.https.onCall( - async (request, response) => { - let uid = request.uid; - - try { - var user = await db.collection("users").doc(uid); - await user.update({ personalBests: {} }); - return true; - } catch (e) { - console.log( - `something went wrong when deleting personal bests for ${uid}: ${e.message}` - ); - return false; - } - } -); - async function checkIfTagPB(uid, obj, userdata) { if (obj.tags.length === 0) { return []; @@ -487,47 +358,6 @@ function stdDev(array) { ); } -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; - } -}); - exports.verifyUser = functions.https.onRequest(async (request, response) => { response.set("Access-Control-Allow-Origin", origin); response.set("Access-Control-Allow-Headers", "*"); diff --git a/functions/non-cloud-functions.js b/functions/non-cloud-functions.js new file mode 100644 index 000000000..f1372eef1 --- /dev/null +++ b/functions/non-cloud-functions.js @@ -0,0 +1,40 @@ +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/src/js/simple-popups.js b/src/js/simple-popups.js index 78212e2f6..1d159ecb1 100644 --- a/src/js/simple-popups.js +++ b/src/js/simple-popups.js @@ -4,6 +4,7 @@ import * as Notifications from "./notifications"; import * as AccountController from "./account-controller"; import * as DB from "./db"; import * as Settings from "./settings"; +import axiosInstance from "./axios-instance"; export let list = {}; class SimplePopup { @@ -245,10 +246,7 @@ list.resetPersonalBests = new SimplePopup( () => { try { Loader.show(); - - CloudFunctions.resetPersonalBests({ - uid: DB.currentUser().uid, - }).then((res) => { + axiosInstance.post("/api/resetPersonalBests").then((res) => { if (res) { Loader.hide(); Notifications.add(