converted result saving

This commit is contained in:
Miodec 2021-07-07 14:05:18 +01:00
parent c3b058c836
commit 689dab1c2e
3 changed files with 53 additions and 76 deletions

View file

@ -1,6 +1,6 @@
const ResultDAO = require("../../dao/result");
const UserDAO = require("../../dao/user");
const PublicStatsDAO = require("../../dao/public-stats");
// const PublicStatsDAO = require("../../dao/public-stats");
const {
validateObjectValues,
validateResult,
@ -21,9 +21,9 @@ class ResultController {
static async addResult(req, res, next) {
try {
const { uid } = req.decodedToken;
let result = req.result;
if (!validateObjectValues(result))
return res.sendStatus(400).json({ message: "Bad input" });
const { result } = req.body;
if (validateObjectValues(result) > 0)
return res.status(400).json({ message: "Bad input" });
if (
result.wpm <= 0 ||
result.wpm > 350 ||
@ -31,7 +31,7 @@ class ResultController {
result.acc > 100 ||
result.consistency > 100
) {
return res.sendStatus(400).json({ message: "Bad input" });
return res.status(400).json({ message: "Bad input" });
}
if (
(result.mode === "time" && result.mode2 < 15 && result.mode2 > 0) ||
@ -58,11 +58,11 @@ class ResultController {
result.customText.isTimeRandom &&
result.customText.time < 15)
) {
return res.sendStatus(400).json({ message: "Test too short" });
return res.status(400).json({ message: "Test too short" });
}
if (!validateResult(result)) {
return res
.sendStatus(400)
.status(400)
.json({ message: "Result data doesn't make sense" });
}
@ -103,9 +103,7 @@ class ResultController {
(result.wpm > 200 && result.consistency < 70)
) {
//possible bot
return res
.sendStatus(400)
.json({ message: "Possible bot detected" });
return res.status(400).json({ message: "Possible bot detected" });
}
if (
(result.keySpacingStats.sd > 15 &&
@ -118,7 +116,7 @@ class ResultController {
//close to the bot detection threshold
}
} else {
return res.sendStatus(400).json({ message: "Missing key data" });
return res.status(400).json({ message: "Missing key data" });
}
}
}
@ -147,13 +145,13 @@ class ResultController {
}
tt = result.testDuration + result.incompleteTestSeconds - afk;
await PublicStatsDAO.increment(result.restartCount, 1, tt);
await UserDAO.updateTypingStats(uid, result.restartCount, tt);
await ResultDAO.addResult(uid, result);
return res
.sendStatus(200)
.json({ message: "Result saved", isPb, name, tagPbs });
.status(200)
.json({ message: "Result saved", isPb, name: result.name, tagPbs });
} catch (e) {
next(e);
}

View file

@ -6,4 +6,6 @@ const router = Router();
router.get("/", authenticateRequest, ResultController.getResults);
router.post("/add", authenticateRequest, ResultController.addResult);
module.exports = router;

View file

@ -32,10 +32,12 @@ import * as MonkeyPower from "./monkey-power";
let glarsesMode = false;
export function toggleGlarses(){
export function toggleGlarses() {
glarsesMode = true;
console.log('Glarses Mode On - test result will be hidden. You can check the stats in the console (here)');
console.log('To disable Glarses Mode refresh the page.');
console.log(
"Glarses Mode On - test result will be hidden. You can check the stats in the console (here)"
);
console.log("To disable Glarses Mode refresh the page.");
}
export let notSignedInLastResult = null;
@ -1009,17 +1011,15 @@ export function finish(difficultyFailed = false) {
TimerProgress.hide();
Funbox.activate("none", null);
if (
Misc.roundTo2(TestStats.calculateTestSeconds()) % 1 != 0 &&
Config.mode !== "time"
) {
let stats = TestStats.calculateStats();
if (stats.time % 1 != 0 && Config.mode !== "time") {
TestStats.setLastSecondNotRound();
}
if (Config.mode == "zen" || bailout) {
TestStats.removeAfkData();
}
let stats = TestStats.calculateStats();
if (stats === undefined) {
stats = {
wpm: 0,
@ -1577,51 +1577,21 @@ export function finish(difficultyFailed = false) {
Notifications.add("You are offline. Result not saved.", -1);
} else {
axiosInstance
.post("/testCompleted", {
obj: completedEvent,
.post("/result/add", {
result: completedEvent,
})
.then((e) => {
.then((response) => {
AccountButton.loading(false);
if (e.data == null) {
if (response.status !== 200) {
Notifications.add(
"Unexpected response from the server: " + e.data,
"Result not saved. " + response.data.message,
-1
);
return;
}
if (e.data.resultCode === -1) {
Notifications.add("Could not save result", -1);
} else if (e.data.resultCode === -2) {
Notifications.add(
"Possible bot detected. Result not saved.",
-1
);
} else if (e.data.resultCode === -3) {
Notifications.add(
"Could not verify keypress stats. Result not saved.",
-1
);
} else if (e.data.resultCode === -4) {
Notifications.add(
"Result data does not make sense. Result not saved.",
-1
);
} else if (e.data.resultCode === -5) {
Notifications.add("Test too short. Result not saved.", -1);
} else if (e.data.resultCode === -999) {
console.error("internal error: " + e.data.message);
Notifications.add(
"Internal error. Result might not be saved. " +
e.data.message,
-1
);
} else if (
e.data.resultCode === 1 ||
e.data.resultCode === 2
) {
completedEvent.id = e.data.createdId;
} else {
completedEvent.id = response.data.createdId;
TestLeaderboards.check(completedEvent);
if (e.data.resultCode === 2) {
if (response.data.isPb) {
completedEvent.isPb = true;
}
if (
@ -1661,7 +1631,7 @@ export function finish(difficultyFailed = false) {
console.log("Analytics unavailable");
}
if (e.data.resultCode === 2) {
if (response.data.isPb) {
//new pb
PbCrown.show();
DB.saveLocalPB(
@ -1675,7 +1645,7 @@ export function finish(difficultyFailed = false) {
stats.wpmRaw,
consistency
);
} else if (e.data.resultCode === 1) {
} else {
PbCrown.hide();
// if (localPb) {
// Notifications.add(
@ -1851,7 +1821,7 @@ export function finish(difficultyFailed = false) {
ChartController.result.update({ duration: 0 });
ChartController.result.resize();
if(glarsesMode){
if (glarsesMode) {
$("#middle #result .glarsesmessage").remove();
$("#middle #result").prepend(`
@ -1869,21 +1839,28 @@ export function finish(difficultyFailed = false) {
$("#middle #result #resultReplay").remove();
$("#middle #result .loginTip").remove();
console.log(`Test Completed: ${stats.wpm} wpm ${stats.acc}% acc ${stats.wpmRaw} raw ${consistency}% consistency`);
console.log(
`Test Completed: ${stats.wpm} wpm ${stats.acc}% acc ${stats.wpmRaw} raw ${consistency}% consistency`
);
}
UI.swapElements($("#typingTest"), $("#result"), 250, () => {
TestUI.setResultCalculating(false);
$("#words").empty();
ChartController.result.resize();
if (Config.alwaysShowWordsHistory) {
TestUI.toggleResultWords();
UI.swapElements(
$("#typingTest"),
$("#result"),
250,
() => {
TestUI.setResultCalculating(false);
$("#words").empty();
ChartController.result.resize();
if (Config.alwaysShowWordsHistory) {
TestUI.toggleResultWords();
}
$("#testModesNotice").addClass("hidden");
},
() => {
Keymap.hide();
}
$("#testModesNotice").addClass("hidden");
}, () => {
Keymap.hide();
});
);
}
export function fail() {