From 47c86680696e1a24b9ba5bcabc55d61a85a049db Mon Sep 17 00:00:00 2001 From: Miodec Date: Fri, 27 Oct 2023 14:17:20 +0100 Subject: [PATCH] impr: allow low accuracy scores to be submitted if opted out of leaderboards --- backend/src/api/controllers/result.ts | 6 ++++++ backend/src/api/schemas/result-schema.ts | 2 +- frontend/src/ts/test/test-logic.ts | 7 ++++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/backend/src/api/controllers/result.ts b/backend/src/api/controllers/result.ts index 769693c2b..fc9a603cc 100644 --- a/backend/src/api/controllers/result.ts +++ b/backend/src/api/controllers/result.ts @@ -150,6 +150,12 @@ export async function addResult( //todo add a type here const result = Object.assign({}, req.body.result); + if (!user.lbOptOut && result.acc < 75) { + throw new MonkeyError( + 400, + "Cannot submit a result with less than 75% accuracy" + ); + } result.uid = uid; if (isTestTooShort(result)) { const status = MonkeyStatusCodes.TEST_TOO_SHORT; diff --git a/backend/src/api/schemas/result-schema.ts b/backend/src/api/schemas/result-schema.ts index 47e1d2caa..af26c469a 100644 --- a/backend/src/api/schemas/result-schema.ts +++ b/backend/src/api/schemas/result-schema.ts @@ -2,7 +2,7 @@ import joi from "joi"; const RESULT_SCHEMA = joi .object({ - acc: joi.number().min(75).max(100).required(), + acc: joi.number().min(50).max(100).required(), afkDuration: joi.number().min(0).required(), bailedOut: joi.boolean().required(), blindMode: joi.boolean().required(), diff --git a/frontend/src/ts/test/test-logic.ts b/frontend/src/ts/test/test-logic.ts index b7cb3c1f4..a8b5e07d1 100644 --- a/frontend/src/ts/test/test-logic.ts +++ b/frontend/src/ts/test/test-logic.ts @@ -1065,7 +1065,12 @@ export async function finish(difficultyFailed = false): Promise { Notifications.add("Test invalid - raw", 0); TestStats.setInvalid(); dontSave = true; - } else if (completedEvent.acc < 75 || completedEvent.acc > 100) { + } else if ( + (!DB.getSnapshot()?.lbOptOut && + (completedEvent.acc < 75 || completedEvent.acc > 100)) || + (DB.getSnapshot()?.lbOptOut === true && + (completedEvent.acc < 50 || completedEvent.acc > 100)) + ) { Notifications.add("Test invalid - accuracy", 0); TestStats.setInvalid(); dontSave = true;