mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-10-06 05:26:54 +08:00
fixed pb not setting on first test bug
This commit is contained in:
parent
b2b0634195
commit
5cdc462757
4 changed files with 61 additions and 188 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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", "*");
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Add table
Reference in a new issue