add iidx-versions fixer

This commit is contained in:
zkldi
2021-05-24 16:10:17 +01:00
parent 63582ba6d1
commit e3f8f0e47a
3 changed files with 128 additions and 1 deletions
+2 -1
View File
@@ -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
!scripts/__MDB-PARSERS/*/convert.ts
scripts/single-use/fix-iidx-versions/versions.json
@@ -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"));
@@ -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);
})();