fixed pb not setting on first test bug

This commit is contained in:
lukew3 2021-05-25 16:28:11 -04:00
parent b2b0634195
commit 5cdc462757
4 changed files with 61 additions and 188 deletions

View file

@ -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

View file

@ -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) {

View file

@ -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", "*");

View file

@ -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()