From e3f8f0e47a61d2aae8a2ccd472ac7d8d2021aa51 Mon Sep 17 00:00:00 2001 From: zkldi Date: Mon, 24 May 2021 16:10:17 +0100 Subject: [PATCH] add iidx-versions fixer --- server/.gitignore | 3 +- .../fix-iidx-versions/fix-iidx-versions.ts | 30 ++++++ .../fix-iidx-versions/update-versions.ts | 96 +++++++++++++++++++ 3 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 server/scripts/single-use/fix-iidx-versions/fix-iidx-versions.ts create mode 100644 server/scripts/single-use/fix-iidx-versions/update-versions.ts diff --git a/server/.gitignore b/server/.gitignore index a835a1805..d3f7a9d0d 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -19,4 +19,5 @@ scripts/validate-database-errs/* # we don't need to commit scripts/__MDB-PARSERS/*/* !scripts/__MDB-PARSERS/*/main.ts -!scripts/__MDB-PARSERS/*/convert.ts \ No newline at end of file +!scripts/__MDB-PARSERS/*/convert.ts +scripts/single-use/fix-iidx-versions/versions.json diff --git a/server/scripts/single-use/fix-iidx-versions/fix-iidx-versions.ts b/server/scripts/single-use/fix-iidx-versions/fix-iidx-versions.ts new file mode 100644 index 000000000..0fc7e00fd --- /dev/null +++ b/server/scripts/single-use/fix-iidx-versions/fix-iidx-versions.ts @@ -0,0 +1,30 @@ +import db from "../../../src/db/db"; +import { ChartDocument } from "kamaitachi-common"; + +db.charts.iidx + .find({}) + // @ts-expect-error it exists + .each(async (c: ChartDocument<"iidx:SP" | "iidx:DP">, { pause, resume }: any) => { + pause(); + + const song = (await db.songs.iidx.findOne({ id: c.songID }))!; + + let versions = []; + + if (song.firstVersion === "27") { + versions = ["27", "28", "27-omni", "28-omni"]; + } else if (song.firstVersion === "28") { + versions = ["28", "28-omni"]; + } else if (song.firstVersion === "inf") { + versions = ["inf"]; + } else if (song.firstVersion === "inf2020") { + versions = ["inf2020"]; + } else { + versions = ["26", "27", "28", "26-omni", "27-omni", "28-omni"]; + } + + await db.charts.iidx.update({ _id: c._id }, { $set: { versions } }); + + resume(); + }) + .then(() => console.log("done")); diff --git a/server/scripts/single-use/fix-iidx-versions/update-versions.ts b/server/scripts/single-use/fix-iidx-versions/update-versions.ts new file mode 100644 index 000000000..4444afe59 --- /dev/null +++ b/server/scripts/single-use/fix-iidx-versions/update-versions.ts @@ -0,0 +1,96 @@ +/* eslint-disable no-await-in-loop */ +import db from "../../../src/db/db"; +import fs from "fs"; +import path from "path"; +import CreateLogCtx from "../../../src/common/logger"; +import { FindSongOnTitleInsensitive } from "../../../src/common/database-lookup/song"; +const logger = CreateLogCtx("scripts/single-use/fix-iidx-versions/update-versions.ts"); + +const comicallyLargeJSONData = JSON.parse( + fs.readFileSync(path.join(__dirname, "./versions.json"), "utf-8") +); + +const DIFF_MAP = { + A: "ANOTHER", + H: "HYPER", + N: "NORMAL", + B: "BEGINNER", + X: "LEGGENDARIA", +} as any; + +function ConvertVersion(c: string) { + if (c.startsWith("AC")) { + return c.split("AC")[1]; + } else if (c.startsWith("OM")) { + return `${c.split("OM")[1]}-omni`; + } else if (c.startsWith("CS")) { + return `${c.split("CS")[1]}-cs`; + } else if (c === "INF") { + return "inf"; + } else if (c === "BMUS") { + return "bmus"; + } else { + logger.error(`Invalid Chart Version ${c}.`); + throw new Error("Invalid Chart Version"); + } +} + +(async () => { + for (const data of comicallyLargeJSONData) { + const song = await FindSongOnTitleInsensitive("iidx", data["MUSIC NAME"]); + + if (!song) { + logger.error(`Can't find song with title ${data["MUSIC NAME"]}.`); + continue; + } + + const playtype = data.STYLE === "S" ? "SP" : "DP"; + + const difficulty = DIFF_MAP[data.DIFF]; + + const relevantVersions = [ + "OM27", + "OM26", + "AC27", + "AC26", + "INF", + "CS16", + "CS15", + "CS14", + "CS13", + "CS12", + "CS11", + "CS10", + "CS9", + "CS8", + "CS7", + "BMUS", + "CS6", + "CS5", + "CS4", + "CS3", + ] + .filter((e) => data[e] === "1") + .map(ConvertVersion); + + if (!relevantVersions.includes("27-omni") && !relevantVersions.includes("inf2020")) { + logger.warn(`Song ${song.title} (${playtype} ${difficulty}) has no relevant versions.`); + continue; + } + + // logger.info(relevantVersions);q + + const chart = await db.charts.iidx.findOne({ songID: song.id, difficulty, playtype }); + + if (!chart) { + logger.error(`Can't find chart ${song.title} (${playtype} ${difficulty})`); + continue; + } + + await db.charts.iidx.update({ _id: chart._id }, { $set: { versions: relevantVersions } }); + } + + logger.info("done"); + + process.exit(0); +})();