From 5a5cdaa475fa877dea03455b6b72c2e12e09656c Mon Sep 17 00:00:00 2001 From: zkldi Date: Mon, 10 May 2021 04:44:11 +0100 Subject: [PATCH] port ddr --- .../__KT_DATABASE_MIGRATION/charts-ddr.ts | 60 +++++++++++++++++++ .../__KT_DATABASE_MIGRATION/songs-ddr.ts | 27 +++++++++ 2 files changed, 87 insertions(+) create mode 100644 server/scripts/__KT_DATABASE_MIGRATION/charts-ddr.ts create mode 100644 server/scripts/__KT_DATABASE_MIGRATION/songs-ddr.ts diff --git a/server/scripts/__KT_DATABASE_MIGRATION/charts-ddr.ts b/server/scripts/__KT_DATABASE_MIGRATION/charts-ddr.ts new file mode 100644 index 000000000..cb8af6103 --- /dev/null +++ b/server/scripts/__KT_DATABASE_MIGRATION/charts-ddr.ts @@ -0,0 +1,60 @@ +import { ChartDocument, SongDocument } from "kamaitachi-common"; +import db from "../../src/db/db"; +import CreateLogCtx from "../../src/logger"; +import MigrateRecords from "./migrate"; +import { gameOrders } from "kamaitachi-common/js/config"; +import { oldKTDB } from "./old-db"; + +const logger = CreateLogCtx("charts-ddr.ts"); + +async function ConvertFn(c: any): Promise> { + let song = (await db.songs.ddr.findOne({ + id: c.id, + })) as SongDocument<"ddr">; + + let oldSong = await oldKTDB.get("songs-ddr").findOne({ + id: c.id, + }); + + if (!song) { + logger.severe(`Cannot find song with ID ${c.id}?`); + throw new Error(`Cannot find song with ID ${c.id}?`); + } + + const newChartDoc: ChartDocument<"ddr:SP" | "ddr:DP"> = { + rgcID: null, + chartID: c.chartID, + difficulty: c.difficulty, + songID: c.id, + playtype: c.playtype, + levelNum: c.levelNum, + level: c.level.toString(), + flags: { + "IN BASE GAME": true, + "N-1": true, + }, + data: { + inGameID: c.internals.inGameID, + songHash: oldSong.internals.songHash, + }, + isPrimary: true, + versions: [], // sentinel + }; + + let idx = gameOrders.ddr.indexOf(song.firstVersion!); + + if (idx === -1) { + logger.warn(`Invalid firstAppearance of ${song.firstVersion!}, running anyway.`); + newChartDoc.versions = [song.firstVersion!]; + } else { + newChartDoc.versions = gameOrders.ddr.slice(idx); + } + + return newChartDoc; +} + +(async () => { + await MigrateRecords(db.charts.ddr, "charts-ddr", ConvertFn); + + process.exit(0); +})(); diff --git a/server/scripts/__KT_DATABASE_MIGRATION/songs-ddr.ts b/server/scripts/__KT_DATABASE_MIGRATION/songs-ddr.ts new file mode 100644 index 000000000..42a931847 --- /dev/null +++ b/server/scripts/__KT_DATABASE_MIGRATION/songs-ddr.ts @@ -0,0 +1,27 @@ +import { SongDocument } from "kamaitachi-common"; +import { gameOrders } from "kamaitachi-common/js/config"; +import db from "../../src/db/db"; +import MigrateRecords from "./migrate"; + +function ConvertFn(c: any): SongDocument<"ddr"> { + const newSongDoc: SongDocument<"ddr"> = { + title: c.title, + artist: c.artist, + id: c.id, + firstVersion: c.firstAppearance, + "alt-titles": c["alt-titles"] ? c["alt-titles"].filter((e: string) => e !== c.title) : [], + "search-titles": c["search-title"] + .filter((e: string) => !!e) + .map((e: string) => e.toString()) + .filter((e: string) => e !== c.title), + data: {}, + }; + + return newSongDoc; +} + +(async () => { + await MigrateRecords(db.songs.ddr, "songs-ddr", ConvertFn); + + process.exit(0); +})();