From ae5f8a7e08588776cb7a27df5b96df4e9c131529 Mon Sep 17 00:00:00 2001 From: zkldi Date: Tue, 25 May 2021 18:09:09 +0100 Subject: [PATCH] de-utils a lot of stuff --- .../framework/milestones/milestones.ts | 39 +++++++++++++++++- .../import-types/ir/usc/converter.ts | 2 +- .../import-types/ir/usc/parser.ts | 2 +- .../middleware/multer-upload.ts} | 2 +- .../router/api/auth}/auth.test.ts | 8 ++-- .../{utils => server/router/api/auth}/auth.ts | 12 +++--- server/src/server/router/api/auth/router.ts | 2 +- server/src/server/router/api/import/router.ts | 2 +- server/src/server/router/ir/usc/router.ts | 4 +- .../ir/usc/{common.test.ts => usc.test.ts} | 2 +- .../router/ir/usc/{common.ts => usc.ts} | 0 server/src/utils/milestone.ts | 40 +------------------ 12 files changed, 58 insertions(+), 57 deletions(-) rename server/src/{utils/multer.ts => server/middleware/multer-upload.ts} (96%) rename server/src/{utils => server/router/api/auth}/auth.test.ts (89%) rename server/src/{utils => server/router/api/auth}/auth.ts (89%) rename server/src/server/router/ir/usc/{common.test.ts => usc.test.ts} (99%) rename server/src/server/router/ir/usc/{common.ts => usc.ts} (100%) diff --git a/server/src/score-import/framework/milestones/milestones.ts b/server/src/score-import/framework/milestones/milestones.ts index 88fd9a605..2bd98e22e 100644 --- a/server/src/score-import/framework/milestones/milestones.ts +++ b/server/src/score-import/framework/milestones/milestones.ts @@ -6,10 +6,47 @@ import { GoalImportInfo, UserMilestoneDocument, MilestoneImportInfo, + MilestoneDocument, } from "kamaitachi-common"; import db from "../../../external/mongo/db"; -import { ProcessMilestoneFromGII } from "../../../utils/milestone"; import { BulkWriteUpdateOneOperation } from "mongodb"; +import { CalculateMilestoneOutOf, GetGoalIDsFromMilestone } from "../../../utils/milestone"; + +/** + * Processes and updates a user's milestones from their Goal Import Info (i.e. what is returned + * about goals from imports) + */ +export function ProcessMilestoneFromGII( + milestone: MilestoneDocument, + gii: Map +) { + const goalIDs = GetGoalIDsFromMilestone(milestone); + + let progress = 0; + + for (const goalID of goalIDs) { + const userInfo = gii.get(goalID); + + if (!userInfo) { + continue; + } + + if (!userInfo.achieved) { + continue; + } + + progress++; + } + + const outOf = CalculateMilestoneOutOf(milestone, goalIDs); + + // milestone achieved! + if (progress >= outOf) { + return { achieved: true, progress }; + } + + return { achieved: false, progress }; +} export async function UpdateUsersMilestones( importGoalInfo: GoalImportInfo[], diff --git a/server/src/score-import/import-types/ir/usc/converter.ts b/server/src/score-import/import-types/ir/usc/converter.ts index 3c68504ec..62b2e306f 100644 --- a/server/src/score-import/import-types/ir/usc/converter.ts +++ b/server/src/score-import/import-types/ir/usc/converter.ts @@ -1,4 +1,4 @@ -import { USCClientScore } from "../../../../server/router/ir/usc/common"; +import { USCClientScore } from "../../../../server/router/ir/usc/usc"; import { FindSongOnID } from "../../../../utils/database-lookup/song"; import { KtLogger } from "../../../../utils/types"; import { InternalFailure, InvalidScoreFailure } from "../../../framework/common/converter-failures"; diff --git a/server/src/score-import/import-types/ir/usc/parser.ts b/server/src/score-import/import-types/ir/usc/parser.ts index 708e1279a..5b6bd13c8 100644 --- a/server/src/score-import/import-types/ir/usc/parser.ts +++ b/server/src/score-import/import-types/ir/usc/parser.ts @@ -3,7 +3,7 @@ import { ChartDocument } from "kamaitachi-common"; import p, { PrudenceSchema } from "prudence"; import { InvalidScoreFailure } from "../../../framework/common/converter-failures"; import { FormatPrError } from "../../../../utils/prudence"; -import { USCClientScore } from "../../../../server/router/ir/usc/common"; +import { USCClientScore } from "../../../../server/router/ir/usc/usc"; import { IRUSCContext } from "./types"; import { ConverterIRUSC } from "./converter"; import { ParserFunctionReturnsSync } from "../../common/types"; diff --git a/server/src/utils/multer.ts b/server/src/server/middleware/multer-upload.ts similarity index 96% rename from server/src/utils/multer.ts rename to server/src/server/middleware/multer-upload.ts index e70895c3f..505f065a3 100644 --- a/server/src/utils/multer.ts +++ b/server/src/server/middleware/multer-upload.ts @@ -2,7 +2,7 @@ import { RequestHandler } from "express"; import multer, { MulterError } from "multer"; -import CreateLogCtx from "./logger"; +import CreateLogCtx from "../../utils/logger"; const defaultLogger = CreateLogCtx(__filename); diff --git a/server/src/utils/auth.test.ts b/server/src/server/router/api/auth/auth.test.ts similarity index 89% rename from server/src/utils/auth.test.ts rename to server/src/server/router/api/auth/auth.test.ts index 410ec8c75..89080136c 100644 --- a/server/src/utils/auth.test.ts +++ b/server/src/server/router/api/auth/auth.test.ts @@ -7,12 +7,12 @@ import { ValidateCaptcha, } from "./auth"; import t from "tap"; -import db, { CloseMongoConnection } from "../external/mongo/db"; +import db, { CloseMongoConnection } from "../../../../external/mongo/db"; import { PrivateUserDocument } from "kamaitachi-common"; -import { prAssert } from "../test-utils/asserts"; +import { prAssert } from "../../../../test-utils/asserts"; import Prudence from "prudence"; -import ResetDBState from "../test-utils/reset-db-state"; -import { MockFetch } from "../test-utils/mock-fetch"; +import ResetDBState from "../../../../test-utils/reset-db-state"; +import { MockFetch } from "../../../../test-utils/mock-fetch"; t.test("#CreateAPIKey", (t) => { t.match( diff --git a/server/src/utils/auth.ts b/server/src/server/router/api/auth/auth.ts similarity index 89% rename from server/src/utils/auth.ts rename to server/src/server/router/api/auth/auth.ts index 5f6cf6a28..088538d48 100644 --- a/server/src/utils/auth.ts +++ b/server/src/server/router/api/auth/auth.ts @@ -6,13 +6,13 @@ import { PublicAPIKeyDocument, PublicUserDocument, } from "kamaitachi-common"; -import db from "../external/mongo/db"; -import { GetNextCounterValue } from "./db"; import { InsertResult } from "monk"; -import CreateLogCtx from "./logger"; -import { FormatUserDoc } from "./user"; -import nodeFetch from "./fetch"; -import { CAPTCHA_SECRET_KEY } from "../secrets"; +import { CAPTCHA_SECRET_KEY } from "../../../../example-secrets"; +import db from "../../../../external/mongo/db"; +import { GetNextCounterValue } from "../../../../utils/db"; +import CreateLogCtx from "../../../../utils/logger"; +import { FormatUserDoc } from "../../../../utils/user"; +import nodeFetch from "../../../../utils/fetch"; const logger = CreateLogCtx(__filename); diff --git a/server/src/server/router/api/auth/router.ts b/server/src/server/router/api/auth/router.ts index 18f8a1e57..2e90f3032 100644 --- a/server/src/server/router/api/auth/router.ts +++ b/server/src/server/router/api/auth/router.ts @@ -7,7 +7,7 @@ import { ReinstateInvite, ValidatePassword, ValidateCaptcha, -} from "../../../../utils/auth"; +} from "./auth"; import { FormatUserDoc, GetUserCaseInsensitive, diff --git a/server/src/server/router/api/import/router.ts b/server/src/server/router/api/import/router.ts index b0c9a6630..2c7958319 100644 --- a/server/src/server/router/api/import/router.ts +++ b/server/src/server/router/api/import/router.ts @@ -9,7 +9,7 @@ import { RequireLoggedIn } from "../../../middleware/require-logged-in"; import ScoreImportFatalError from "../../../../score-import/framework/score-importing/score-import-error"; import { KtLogger } from "../../../../utils/types"; import { ExpressWrappedScoreImportMain } from "../../../../score-import/framework/express-wrapper"; -import { CreateMulterSingleUploadMiddleware } from "../../../../utils/multer"; +import { CreateMulterSingleUploadMiddleware } from "../../../middleware/multer-upload"; const logger = CreateLogCtx(__filename); diff --git a/server/src/server/router/ir/usc/router.ts b/server/src/server/router/ir/usc/router.ts index 1c15b2c83..788a19699 100644 --- a/server/src/server/router/ir/usc/router.ts +++ b/server/src/server/router/ir/usc/router.ts @@ -10,13 +10,13 @@ import { } from "kamaitachi-common"; import { AssertStrAsPositiveNonZeroInt } from "../../../../score-import/framework/common/string-asserts"; import CreateLogCtx from "../../../../utils/logger"; -import { CreatePOSTScoresResponseBody, KtchiScoreToServerScore } from "./common"; +import { CreatePOSTScoresResponseBody, KtchiScoreToServerScore } from "./usc"; import { ExpressWrappedScoreImportMain } from "../../../../score-import/framework/express-wrapper"; import { GetUserWithID } from "../../../../utils/user"; import { KtLogger } from "../../../../utils/types"; import { ParseIRUSC } from "../../../../score-import/import-types/ir/usc/parser"; import { USCIR_MAX_LEADERBOARD_N } from "../../../../constants/usc-ir"; -import { CreateMulterSingleUploadMiddleware } from "../../../../utils/multer"; +import { CreateMulterSingleUploadMiddleware } from "../../../middleware/multer-upload"; const logger = CreateLogCtx(__filename); diff --git a/server/src/server/router/ir/usc/common.test.ts b/server/src/server/router/ir/usc/usc.test.ts similarity index 99% rename from server/src/server/router/ir/usc/common.test.ts rename to server/src/server/router/ir/usc/usc.test.ts index 2aa2daa14..d69390e4d 100644 --- a/server/src/server/router/ir/usc/common.test.ts +++ b/server/src/server/router/ir/usc/usc.test.ts @@ -2,7 +2,7 @@ import t from "tap"; import db, { CloseMongoConnection } from "../../../../external/mongo/db"; import ResetDBState from "../../../../test-utils/reset-db-state"; -import { CreatePOSTScoresResponseBody, KtchiScoreToServerScore } from "./common"; +import { CreatePOSTScoresResponseBody, KtchiScoreToServerScore } from "./usc"; import { ChartDocument, PBScoreDocument, ScoreDocument } from "kamaitachi-common"; import deepmerge from "deepmerge"; diff --git a/server/src/server/router/ir/usc/common.ts b/server/src/server/router/ir/usc/usc.ts similarity index 100% rename from server/src/server/router/ir/usc/common.ts rename to server/src/server/router/ir/usc/usc.ts diff --git a/server/src/utils/milestone.ts b/server/src/utils/milestone.ts index e4ecdd700..84b89880d 100644 --- a/server/src/utils/milestone.ts +++ b/server/src/utils/milestone.ts @@ -1,46 +1,10 @@ import { MilestoneDocument, integer, GoalImportInfo } from "kamaitachi-common"; -/** - * Processes and updates a user's milestones from their Goal Import Info (i.e. what is returned - * about goals from imports) - */ -export function ProcessMilestoneFromGII( - milestone: MilestoneDocument, - gii: Map -) { - const goalIDs = GetGoalIDsFromMilestone(milestone); - - let progress = 0; - - for (const goalID of goalIDs) { - const userInfo = gii.get(goalID); - - if (!userInfo) { - continue; - } - - if (!userInfo.achieved) { - continue; - } - - progress++; - } - - const outOf = CalculateMilestoneOutOf(milestone, goalIDs); - - // milestone achieved! - if (progress >= outOf) { - return { achieved: true, progress }; - } - - return { achieved: false, progress }; -} - /** * Retrieves the goalID documents in a single array from the * nested structure of milestones. */ -function GetGoalIDsFromMilestone(milestone: MilestoneDocument) { +export function GetGoalIDsFromMilestone(milestone: MilestoneDocument) { // this sucks - maybe a nicer way to do this, because nested // maps are just ugly return milestone.milestoneData.map((e) => e.goals.map((e) => e.goalID)).flat(1); @@ -50,7 +14,7 @@ function GetGoalIDsFromMilestone(milestone: MilestoneDocument) { * Work out how many goals need to be achieved for this * milestone to be considered completed. */ -function CalculateMilestoneOutOf(milestone: MilestoneDocument, goalIDs: string[]): integer { +export function CalculateMilestoneOutOf(milestone: MilestoneDocument, goalIDs: string[]): integer { if (milestone.criteria.type === "all") { return goalIDs.length; } else if (milestone.criteria.type === "abs") {