diff --git a/functions/index.js b/functions/index.js index c00fe345b..4e167b342 100644 --- a/functions/index.js +++ b/functions/index.js @@ -407,6 +407,54 @@ exports.checkNameAvailability = functions.https.onRequest( // } // ); +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}`); + } + } +); + function checkIfPB(uid, obj, userdata) { let pbs = null; if (obj.mode == "quote") { diff --git a/src/js/account.js b/src/js/account.js index 55ca52017..54fed3134 100644 --- a/src/js/account.js +++ b/src/js/account.js @@ -360,6 +360,9 @@ function getAccountDataAndInit() { } } } + if (snap.refactored === false) { + CloudFunctions.removeSmallTests({ uid: user.uid }); + } if (!configChangedBeforeDb) { if (cookieConfig === null) { accountIconLoading(false); diff --git a/src/js/cloud-functions.js b/src/js/cloud-functions.js index 7597ffe7a..515bc5f26 100644 --- a/src/js/cloud-functions.js +++ b/src/js/cloud-functions.js @@ -30,3 +30,7 @@ export const clearTagPb = firebase.functions().httpsCallable("clearTagPb"); export const changeDisplayName = firebase .functions() .httpsCallable("changeDisplayName"); + +export const removeSmallTests = firebase + .functions() + .httpsCallable("removeSmallTestsAndQPB"); diff --git a/src/js/db.js b/src/js/db.js index 7be6d3d77..194bfd313 100644 --- a/src/js/db.js +++ b/src/js/db.js @@ -26,6 +26,7 @@ export async function db_getUserSnapshot() { name: undefined, tags: [], favouriteThemes: [], + refactored: false, lbMemory: { time15: { global: null, @@ -85,6 +86,7 @@ export async function db_getUserSnapshot() { snap.config = data.config; snap.favouriteThemes = data.favouriteThemes === undefined ? [] : data.favouriteThemes; + snap.refactored = data.refactored === true ? true : false; snap.globalStats = { time: data.timeTyping, started: data.startedTests,