mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-02-05 13:27:49 +08:00
converted result saving
This commit is contained in:
parent
c3b058c836
commit
689dab1c2e
3 changed files with 53 additions and 76 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -6,4 +6,6 @@ const router = Router();
|
|||
|
||||
router.get("/", authenticateRequest, ResultController.getResults);
|
||||
|
||||
router.post("/add", authenticateRequest, ResultController.addResult);
|
||||
|
||||
module.exports = router;
|
||||
|
|
|
@ -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() {
|
||||
|
|
Loading…
Reference in a new issue