diff --git a/backend/mongo-todo.md b/backend/mongo-todo.md index 43918542a..3d90f8a6c 100644 --- a/backend/mongo-todo.md +++ b/backend/mongo-todo.md @@ -19,6 +19,7 @@ - When a specific script is run, a certain mode will be activated - Tests started and completed doesn't increment when quitting a running test - Doesn't work as I expected in live version either, no issue +- Create configSchema ## After beta is ready diff --git a/backend/server.js b/backend/server.js index 53c0f5834..87cb8c0fe 100644 --- a/backend/server.js +++ b/backend/server.js @@ -173,16 +173,18 @@ async function checkIfPB(uid, obj, userdata) { }); //checked all pbs, nothing found - meaning this is a new pb if (!found) { - pbs[obj.mode][obj.mode2] = { - language: obj.language, - difficulty: obj.difficulty, - punctuation: obj.punctuation, - wpm: obj.wpm, - acc: obj.acc, - raw: obj.rawWpm, - timestamp: Date.now(), - consistency: obj.consistency, - }; + pbs[obj.mode][obj.mode2] = [ + { + language: obj.language, + difficulty: obj.difficulty, + punctuation: obj.punctuation, + wpm: obj.wpm, + acc: obj.acc, + raw: obj.rawWpm, + timestamp: Date.now(), + consistency: obj.consistency, + }, + ]; toUpdate = true; } } catch (e) { diff --git a/functions/index.js b/functions/index.js index cbae667b2..82c3a4dbc 100644 --- a/functions/index.js +++ b/functions/index.js @@ -56,184 +56,6 @@ exports.changeDisplayName = functions.https.onCall( } ); -exports.removeSmallTestsAndQPB = functions.https.onCall( - async (request, response) => { - let uid = request.uid; - - try { - let docs = await db - .collection(`users/${uid}/results`) - .where("mode", "==", "time") - .where("mode2", "<", 15) - .get(); - docs.forEach(async (doc) => { - db.collection(`users/${uid}/results`).doc(doc.id).delete(); - }); - let docs2 = await db - .collection(`users/${uid}/results`) - .where("mode", "==", "words") - .where("mode2", "<", 10) - .get(); - docs2.forEach(async (doc) => { - db.collection(`users/${uid}/results`).doc(doc.id).delete(); - }); - let docs3 = await db - .collection(`users/${uid}/results`) - .where("mode", "==", "custom") - .where("testDuration", "<", 10) - .get(); - docs3.forEach(async (doc) => { - db.collection(`users/${uid}/results`).doc(doc.id).delete(); - }); - // console.log(`removing small tests for ${uid}: ${docs.size} time, ${docs2.size} words, ${docs3.size} custom`); - let userdata = await db.collection(`users`).doc(uid).get(); - userdata = userdata.data(); - try { - pbs = userdata.personalBests; - // console.log(`removing ${Object.keys(pbs.quote).length} quote pb`); - delete pbs.quote; - await db.collection("users").doc(uid).update({ personalBests: pbs }); - } catch {} - db.collection("users") - .doc(uid) - .set({ refactored: true }, { merge: true }); - console.log("removed small tests for " + uid); - } catch (e) { - console.log(`something went wrong for ${uid}: ${e.message}`); - } - } -); - -async function checkIfTagPB(uid, obj, userdata) { - if (obj.tags.length === 0) { - return []; - } - if (obj.mode == "quote") { - return []; - } - let dbtags = []; - let restags = obj.tags; - try { - let snap = await db.collection(`users/${uid}/tags`).get(); - snap.forEach((doc) => { - if (restags.includes(doc.id)) { - let data = doc.data(); - data.id = doc.id; - dbtags.push(data); - } - }); - } catch { - return []; - } - - let ret = []; - for (let i = 0; i < dbtags.length; i++) { - let pbs = null; - try { - pbs = dbtags[i].personalBests; - if (pbs === undefined) { - throw new Error("pb is undefined"); - } - } catch (e) { - //undefined personal best = new personal best - db.collection(`users/${uid}/tags`) - .doc(dbtags[i].id) - .set( - { - personalBests: { - [obj.mode]: { - [obj.mode2]: [ - { - language: obj.language, - difficulty: obj.difficulty, - punctuation: obj.punctuation, - wpm: obj.wpm, - acc: obj.acc, - raw: obj.rawWpm, - timestamp: Date.now(), - consistency: obj.consistency, - }, - ], - }, - }, - }, - { merge: true } - ) - .then((e) => { - ret.push(dbtags[i].id); - }); - continue; - } - let toUpdate = false; - let found = false; - try { - if (pbs[obj.mode][obj.mode2] === undefined) { - pbs[obj.mode][obj.mode2] = []; - } - pbs[obj.mode][obj.mode2].forEach((pb) => { - if ( - pb.punctuation === obj.punctuation && - pb.difficulty === obj.difficulty && - pb.language === obj.language - ) { - //entry like this already exists, compare wpm - found = true; - if (pb.wpm < obj.wpm) { - //new pb - pb.wpm = obj.wpm; - pb.acc = obj.acc; - pb.raw = obj.rawWpm; - pb.timestamp = Date.now(); - pb.consistency = obj.consistency; - toUpdate = true; - } else { - //no pb - return false; - } - } - }); - //checked all pbs, nothing found - meaning this is a new pb - if (!found) { - pbs[obj.mode][obj.mode2].push({ - language: obj.language, - difficulty: obj.difficulty, - punctuation: obj.punctuation, - wpm: obj.wpm, - acc: obj.acc, - raw: obj.rawWpm, - timestamp: Date.now(), - consistency: obj.consistency, - }); - toUpdate = true; - } - } catch (e) { - // console.log(e); - pbs[obj.mode] = {}; - pbs[obj.mode][obj.mode2] = [ - { - language: obj.language, - difficulty: obj.difficulty, - punctuation: obj.punctuation, - wpm: obj.wpm, - acc: obj.acc, - raw: obj.rawWpm, - timestamp: Date.now(), - consistency: obj.consistency, - }, - ]; - toUpdate = true; - } - - if (toUpdate) { - db.collection(`users/${uid}/tags`) - .doc(dbtags[i].id) - .update({ personalBests: pbs }); - ret.push(dbtags[i].id); - } - } - return ret; -} - 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-migrated.js b/functions/non-migrated.js index a91009eb3..7e483fab2 100644 --- a/functions/non-migrated.js +++ b/functions/non-migrated.js @@ -68,6 +68,54 @@ exports.clearTagPb = functions.https.onCall((request, response) => { } }); +exports.removeSmallTestsAndQPB = functions.https.onCall( + async (request, response) => { + let uid = request.uid; + + try { + let docs = await db + .collection(`users/${uid}/results`) + .where("mode", "==", "time") + .where("mode2", "<", 15) + .get(); + docs.forEach(async (doc) => { + db.collection(`users/${uid}/results`).doc(doc.id).delete(); + }); + let docs2 = await db + .collection(`users/${uid}/results`) + .where("mode", "==", "words") + .where("mode2", "<", 10) + .get(); + docs2.forEach(async (doc) => { + db.collection(`users/${uid}/results`).doc(doc.id).delete(); + }); + let docs3 = await db + .collection(`users/${uid}/results`) + .where("mode", "==", "custom") + .where("testDuration", "<", 10) + .get(); + docs3.forEach(async (doc) => { + db.collection(`users/${uid}/results`).doc(doc.id).delete(); + }); + // console.log(`removing small tests for ${uid}: ${docs.size} time, ${docs2.size} words, ${docs3.size} custom`); + let userdata = await db.collection(`users`).doc(uid).get(); + userdata = userdata.data(); + try { + pbs = userdata.personalBests; + // console.log(`removing ${Object.keys(pbs.quote).length} quote pb`); + delete pbs.quote; + await db.collection("users").doc(uid).update({ personalBests: pbs }); + } catch {} + db.collection("users") + .doc(uid) + .set({ refactored: true }, { merge: true }); + console.log("removed small tests for " + uid); + } catch (e) { + console.log(`something went wrong for ${uid}: ${e.message}`); + } + } +); + async function getAllNames() { // return admin // .auth()