From 689dab1c2ec2c32046caf4f8049a90172b68c8ad Mon Sep 17 00:00:00 2001 From: Miodec Date: Wed, 7 Jul 2021 14:05:18 +0100 Subject: [PATCH] converted result saving --- backend/api/controllers/result.js | 26 ++++---- backend/api/routes/result.js | 2 + src/js/test/test-logic.js | 101 ++++++++++++------------------ 3 files changed, 53 insertions(+), 76 deletions(-) diff --git a/backend/api/controllers/result.js b/backend/api/controllers/result.js index 6e9e2bea0..f5b9c4b49 100644 --- a/backend/api/controllers/result.js +++ b/backend/api/controllers/result.js @@ -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); } diff --git a/backend/api/routes/result.js b/backend/api/routes/result.js index de712ef0a..97fb844c3 100644 --- a/backend/api/routes/result.js +++ b/backend/api/routes/result.js @@ -6,4 +6,6 @@ const router = Router(); router.get("/", authenticateRequest, ResultController.getResults); +router.post("/add", authenticateRequest, ResultController.addResult); + module.exports = router; diff --git a/src/js/test/test-logic.js b/src/js/test/test-logic.js index b680764d5..1b1aaac1c 100644 --- a/src/js/test/test-logic.js +++ b/src/js/test/test-logic.js @@ -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() {