From b9e7e04b6eb17d9d1ebe1c843a82bb8c87d74e7b Mon Sep 17 00:00:00 2001
From: zkldi <20380519+zkldi@users.noreply.github.com>
Date: Tue, 14 Nov 2023 22:23:51 +0000
Subject: [PATCH] feat: remove MER from codebase
Hasn't been used in forever.
---
.../app/pages/dashboard/import/ImportPage.tsx | 10 --
.../pages/dashboard/import/MerJSONPage.tsx | 31 ----
common/src/constants/import-types.ts | 1 -
common/src/types/import-types.ts | 1 -
docs/docs/codebase/import/import-types.md | 1 -
docs/docs/codebase/setup/config.md | 1 -
server/example/conf.json5 | 1 -
.../score-import/import-types/common/types.ts | 3 -
.../score-import/import-types/converters.ts | 2 -
.../file/mer-iidx/converter.test.ts | 127 --------------
.../import-types/file/mer-iidx/converter.ts | 91 ----------
.../import-types/file/mer-iidx/parser.test.ts | 160 ------------------
.../import-types/file/mer-iidx/parser.ts | 61 -------
.../import-types/file/mer-iidx/types.ts | 19 ---
.../lib/score-import/import-types/parsers.ts | 2 -
.../router/api/v1/import/router.test.ts | 38 -----
server/test.conf.json5 | 1 -
17 files changed, 550 deletions(-)
delete mode 100644 client/src/app/pages/dashboard/import/MerJSONPage.tsx
delete mode 100644 server/src/lib/score-import/import-types/file/mer-iidx/converter.test.ts
delete mode 100644 server/src/lib/score-import/import-types/file/mer-iidx/converter.ts
delete mode 100644 server/src/lib/score-import/import-types/file/mer-iidx/parser.test.ts
delete mode 100644 server/src/lib/score-import/import-types/file/mer-iidx/parser.ts
delete mode 100644 server/src/lib/score-import/import-types/file/mer-iidx/types.ts
diff --git a/client/src/app/pages/dashboard/import/ImportPage.tsx b/client/src/app/pages/dashboard/import/ImportPage.tsx
index fb37fda23..74f5f11b3 100644
--- a/client/src/app/pages/dashboard/import/ImportPage.tsx
+++ b/client/src/app/pages/dashboard/import/ImportPage.tsx
@@ -533,16 +533,6 @@ function ImportTypeInfoCard({
key="Batch Manual"
/>
);
- case "file/mer-iidx":
- return (
-
- );
case "file/pli-iidx-csv":
return (
- );
-}
-
-function ParseFunction(d: string) {
- const json = JSON.parse(d);
-
- if (!Array.isArray(json)) {
- throw new Error(`Expected a JSON array. Is this valid MER?`);
- }
-
- return {
- valid: true,
- info: {
- Scores: json.length,
- },
- };
-}
diff --git a/common/src/constants/import-types.ts b/common/src/constants/import-types.ts
index 6b1de87b2..196b605c4 100644
--- a/common/src/constants/import-types.ts
+++ b/common/src/constants/import-types.ts
@@ -11,7 +11,6 @@ const FILE_IMPORT_TYPES: Record = {
"file/eamusement-sdvx-csv": true,
"file/batch-manual": true,
"file/solid-state-squad": true,
- "file/mer-iidx": true,
"file/pli-iidx-csv": true,
"file/mypagescraper-records-csv": true,
"file/mypagescraper-player-csv": true,
diff --git a/common/src/types/import-types.ts b/common/src/types/import-types.ts
index 046879d9d..554a84660 100644
--- a/common/src/types/import-types.ts
+++ b/common/src/types/import-types.ts
@@ -2,7 +2,6 @@ export type FileUploadImportTypes =
| "file/batch-manual"
| "file/eamusement-iidx-csv"
| "file/eamusement-sdvx-csv"
- | "file/mer-iidx"
| "file/mypagescraper-player-csv"
| "file/mypagescraper-records-csv"
| "file/pli-iidx-csv"
diff --git a/docs/docs/codebase/import/import-types.md b/docs/docs/codebase/import/import-types.md
index 201f29d23..53e070cd6 100644
--- a/docs/docs/codebase/import/import-types.md
+++ b/docs/docs/codebase/import/import-types.md
@@ -51,7 +51,6 @@ is set to indicate that this was done with User Intent.
| `file/eamusement-iidx-csv` | The E-amusement CSV format for IIDX. This type accepts both Pre-HV and Post-HV formats. | Kamaitachi | Yes |
| `file/batch-manual` | The Tachi BATCH-MANUAL format submitted through a multipart form. | Kamaitachi & Bokutachi | Yes |
| `file/solid-state-squad` | The IIDX XML output by Solid State Squad. | Kamaitachi | Yes |
-| `file/mer-iidx` | The IIDX JSON output from MER. | Kamaitachi | Yes |
| `file/pli-iidx-csv` | Same as eamusement's IIDX CSV, but output from PLI. | Kamaitachi | Yes |
| `ir/direct-manual` | The Tachi BATCH-MANUAL format but submitted in a HTTP Request body as `application/json`. | Kamaitachi & Bokutachi | Depends on Header |
| `ir/barbatos` | Barbatos's format submitted in a HTTP Request Body. | Kamaitachi | No |
diff --git a/docs/docs/codebase/setup/config.md b/docs/docs/codebase/setup/config.md
index 1f52f49aa..0c92c7f78 100644
--- a/docs/docs/codebase/setup/config.md
+++ b/docs/docs/codebase/setup/config.md
@@ -68,7 +68,6 @@ the main benefits for us are as follows:
"file/eamusement-iidx-csv",
"file/batch-manual",
"file/solid-state-squad",
- "file/mer-iidx",
"file/pli-iidx-csv",
"ir/direct-manual",
"ir/barbatos",
diff --git a/server/example/conf.json5 b/server/example/conf.json5
index 733ab3275..1669edd3d 100644
--- a/server/example/conf.json5
+++ b/server/example/conf.json5
@@ -53,7 +53,6 @@
"file/eamusement-iidx-csv",
"file/batch-manual",
"file/solid-state-squad",
- "file/mer-iidx",
"file/pli-iidx-csv",
"file/mypagescraper-records-csv",
"file/mypagescraper-player-csv",
diff --git a/server/src/lib/score-import/import-types/common/types.ts b/server/src/lib/score-import/import-types/common/types.ts
index 2d76eb4e0..3854f585f 100644
--- a/server/src/lib/score-import/import-types/common/types.ts
+++ b/server/src/lib/score-import/import-types/common/types.ts
@@ -1,7 +1,6 @@
import type { ConverterFailure } from "../../framework/common/converter-failures";
import type { DryScore } from "../../framework/common/types";
import type { SDVXEamusementCSVData } from "../file/eamusement-sdvx-csv/types";
-import type { MerScore } from "../file/mer-iidx/types";
import type { S3Score } from "../file/solid-state-squad/types";
import type { MyPageRecordsParsedPB } from "../file/wacca-mypage-scraper/types";
import type { BarbatosContext, BarbatosScore, BarbatosSDVX6Score } from "../ir/barbatos/types";
@@ -34,7 +33,6 @@ export interface ImportTypeDataMap {
"file/eamusement-sdvx-csv": SDVXEamusementCSVData;
"file/batch-manual": BatchManualScore;
"file/solid-state-squad": S3Score;
- "file/mer-iidx": MerScore;
"file/pli-iidx-csv": IIDXEamusementCSVData;
"file/mypagescraper-records-csv": MyPageRecordsParsedPB;
"file/mypagescraper-player-csv": never;
@@ -79,7 +77,6 @@ export interface ImportTypeContextMap {
"file/eamusement-sdvx-csv": EmptyObject;
"file/batch-manual": BatchManualContext;
"file/solid-state-squad": EmptyObject;
- "file/mer-iidx": EmptyObject;
"file/pli-iidx-csv": IIDXEamusementCSVContext;
"file/mypagescraper-records-csv": EmptyObject;
"file/mypagescraper-player-csv": EmptyObject;
diff --git a/server/src/lib/score-import/import-types/converters.ts b/server/src/lib/score-import/import-types/converters.ts
index e46c38076..c1c254665 100644
--- a/server/src/lib/score-import/import-types/converters.ts
+++ b/server/src/lib/score-import/import-types/converters.ts
@@ -6,7 +6,6 @@ import { ConvertAPIKaiSDVX } from "./common/api-kai/sdvx/converter";
import { ConverterBatchManual } from "./common/batch-manual/converter";
import ConvertEamIIDXCSV from "./common/eamusement-iidx-csv/converter";
import ConvertEamSDVXCSV from "./file/eamusement-sdvx-csv/converter";
-import { ConvertFileMerIIDX } from "./file/mer-iidx/converter";
import { ConvertFileS3 } from "./file/solid-state-squad/converter";
import ConvertMyPageScraperRecordsCSV from "./file/wacca-mypage-scraper/converter";
import { ConverterIRBarbatos } from "./ir/barbatos/converter";
@@ -28,7 +27,6 @@ export type ConverterMap = {
export const Converters: ConverterMap = {
"file/solid-state-squad": ConvertFileS3,
"file/batch-manual": ConverterBatchManual,
- "file/mer-iidx": ConvertFileMerIIDX,
"file/pli-iidx-csv": ConvertEamIIDXCSV,
"file/eamusement-iidx-csv": ConvertEamIIDXCSV,
"file/eamusement-sdvx-csv": ConvertEamSDVXCSV,
diff --git a/server/src/lib/score-import/import-types/file/mer-iidx/converter.test.ts b/server/src/lib/score-import/import-types/file/mer-iidx/converter.test.ts
deleted file mode 100644
index 170997bff..000000000
--- a/server/src/lib/score-import/import-types/file/mer-iidx/converter.test.ts
+++ /dev/null
@@ -1,127 +0,0 @@
-import { ConvertFileMerIIDX } from "./converter";
-import deepmerge from "deepmerge";
-import db from "external/mongo/db";
-import CreateLogCtx from "lib/logger/logger";
-import t from "tap";
-import ResetDBState from "test-utils/resets";
-import { LoadTachiIIDXData, Testing511Song, Testing511SPA } from "test-utils/test-data";
-import type { MerScore } from "./types";
-
-const logger = CreateLogCtx(__filename);
-
-t.test("#ConvertFileMerIIDX", (t) => {
- t.beforeEach(ResetDBState);
-
- const MerScore = {
- music_id: 1000,
- play_type: "SINGLE",
- diff_type: "ANOTHER",
- score: 1000,
- miss_count: 21,
- clear_type: "CLEAR",
- update_time: "2021-03-24 07:15:22",
- } as const;
-
- function merc(g: Partial = {}) {
- return ConvertFileMerIIDX(deepmerge(MerScore, g), {}, "file/mer-iidx", logger);
- }
-
- t.test("Valid Conversion", async (t) => {
- const res = await ConvertFileMerIIDX(MerScore, {}, "file/mer-iidx", logger);
-
- t.hasStrict(
- res,
- {
- song: Testing511Song,
- chart: Testing511SPA,
- dryScore: {
- game: "iidx",
- comment: null,
- importType: "file/mer-iidx",
- service: "MER",
- scoreData: {
- score: 1000,
- lamp: "CLEAR",
- judgements: {},
- optional: {
- bp: 21,
- },
- },
- scoreMeta: {},
- timeAchieved: 1616537722000,
- },
- },
- "Should return the converted dry score."
- );
-
- t.end();
- });
-
- t.test("Valid DP Conversion", async (t) => {
- await LoadTachiIIDXData();
- const res = await merc({ play_type: "DOUBLE" });
-
- t.hasStrict(
- res,
- {
- song: { id: 1 },
- chart: { playtype: "DP", data: { inGameID: 1000 } },
- dryScore: {
- game: "iidx",
- comment: null,
- importType: "file/mer-iidx",
- service: "MER",
- scoreData: {
- score: 1000,
- lamp: "CLEAR",
- judgements: {},
- optional: {
- bp: 21,
- },
- },
- scoreMeta: {},
- timeAchieved: 1616537722000,
- },
- },
- "Should return the converted dry score."
- );
-
- t.end();
- });
-
- t.test("Invalid Chart", (t) => {
- t.rejects(() => merc({ diff_type: "LEGGENDARIA" }), {
- message: /Could not find chart with musicID 1000 \(SP LEGGENDARIA/u,
- });
-
- t.end();
- });
-
- t.test("Invalid Song", (t) => {
- t.rejects(() => merc({ music_id: 0 }), {
- message: /Could not find chart with musicID 0/u,
- });
-
- t.end();
- });
-
- t.test("Should log severe on Song-Chart Desync", async (t) => {
- await db.songs.iidx.remove({});
-
- t.rejects(() => merc(), {
- message: /Song-Chart Desync on songID 1/u,
- });
-
- t.end();
- });
-
- t.test("Invalid Date", (t) => {
- t.rejects(() => merc({ update_time: "INVALID" }), {
- message: /Invalid\/Unparsable score timestamp of INVALID/u,
- });
-
- t.end();
- });
-
- t.end();
-});
diff --git a/server/src/lib/score-import/import-types/file/mer-iidx/converter.ts b/server/src/lib/score-import/import-types/file/mer-iidx/converter.ts
deleted file mode 100644
index 8eae9d408..000000000
--- a/server/src/lib/score-import/import-types/file/mer-iidx/converter.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-import {
- InternalFailure,
- SkipScoreFailure,
- SongOrChartNotFoundFailure,
-} from "../../../framework/common/converter-failures";
-import { ParseDateFromString } from "../../../framework/common/score-utils";
-import { FindIIDXChartOnInGameID } from "utils/queries/charts";
-import { FindSongOnID } from "utils/queries/songs";
-import type { DryScore } from "../../../framework/common/types";
-import type { ConverterFunction } from "../../common/types";
-import type { MerScore } from "./types";
-import type { GetEnumValue } from "tachi-common/types/metrics";
-import type { EmptyObject } from "utils/types";
-
-function ConvertMERLamp(lamp: MerScore["clear_type"]): GetEnumValue<"iidx:DP" | "iidx:SP", "lamp"> {
- if (lamp === "FULLCOMBO CLEAR") {
- return "FULL COMBO";
- }
-
- return lamp;
-}
-
-export const ConvertFileMerIIDX: ConverterFunction = async (
- data,
- context,
- importType,
- logger
-) => {
- const playtype = data.play_type === "SINGLE" ? "SP" : "DP";
-
- if (data.diff_type === "BEGINNER") {
- throw new SkipScoreFailure(`BEGINNER scores are not supported.`);
- }
-
- const chart = await FindIIDXChartOnInGameID(data.music_id, playtype, data.diff_type);
-
- if (!chart) {
- throw new SongOrChartNotFoundFailure(
- `Could not find chart with musicID ${data.music_id} (${playtype} ${data.diff_type}.)`,
- importType,
- data,
- context
- );
- }
-
- const song = await FindSongOnID("iidx", chart.songID);
-
- if (!song) {
- logger.severe(`Could not find song with songID ${chart.songID}, but chart exists for it?`);
- throw new InternalFailure(`Song-Chart Desync on songID ${chart.songID}`);
- }
-
- const lamp = ConvertMERLamp(data.clear_type);
-
- const timeAchieved = ParseDateFromString(ConvertDateToJST(data.update_time));
-
- const dryScore: DryScore<"iidx:DP" | "iidx:SP"> = {
- game: "iidx",
- comment: null,
- importType: "file/mer-iidx",
- service: "MER",
- scoreData: {
- score: data.score,
- lamp,
- judgements: {},
- optional: {
- bp: data.miss_count === -1 ? null : data.miss_count,
- },
- },
- scoreMeta: {},
- timeAchieved: timeAchieved !== null ? timeAchieved : null,
- };
-
- return {
- chart,
- song,
- dryScore,
- };
-};
-
-/**
- * MER passes us a rather useless date without any timezone information.
- * To ensure that this parses properly regardless of timezone, we need to
- * assert thathere.
- *
- * @param uselessDate - A date string like 2021-03-24 07:15:22.
- * As you can see, it has no timezone information, and is ambiguous.
- */
-function ConvertDateToJST(uselessDate: string) {
- return `${uselessDate.replace(" ", "T")}+09:00`;
-}
diff --git a/server/src/lib/score-import/import-types/file/mer-iidx/parser.test.ts b/server/src/lib/score-import/import-types/file/mer-iidx/parser.test.ts
deleted file mode 100644
index 8eff65d66..000000000
--- a/server/src/lib/score-import/import-types/file/mer-iidx/parser.test.ts
+++ /dev/null
@@ -1,160 +0,0 @@
-import { ParseMerIIDX } from "./parser";
-import deepmerge from "deepmerge";
-import CreateLogCtx from "lib/logger/logger";
-import t from "tap";
-import { MockMulterFile } from "test-utils/mock-multer";
-import ResetDBState from "test-utils/resets";
-import { GetKTDataBuffer, GetKTDataJSON } from "test-utils/test-data";
-
-const logger = CreateLogCtx(__filename);
-
-t.test("#ParseMerIIDX", (t) => {
- t.beforeEach(ResetDBState);
-
- function mrfb(buffer: Buffer) {
- return ParseMerIIDX(MockMulterFile(buffer, "buffer.json"), {}, logger);
- }
-
- function mrfj(obj: unknown) {
- return ParseMerIIDX(
- MockMulterFile(Buffer.from(JSON.stringify([obj])), "buffer.json"),
- {},
- logger
- );
- }
-
- function mrff(filename: string) {
- return ParseMerIIDX(MockMulterFile(GetKTDataBuffer(filename), filename), {}, logger);
- }
-
- t.test("Basic Parsing", (t) => {
- const res = mrff("./mer/base.json");
-
- t.hasStrict(
- res,
- {
- game: "iidx",
- context: {},
- classProvider: null,
- iterable: [
- {
- music_id: 3007,
- music_name: "Presto",
- play_type: "SINGLE",
- diff_type: "HYPER",
- score: 566,
- miss_count: 46,
- clear_type: "NO PLAY",
- update_time: "2019-06-01 19:56:59",
- },
- {
- music_id: 3013,
- music_name: "THE SAFARI",
- play_type: "SINGLE",
- diff_type: "NORMAL",
- score: 681,
- miss_count: 102,
- clear_type: "FAILED",
- update_time: "2019-05-30 03:21:57",
- },
- {
- music_id: 3213,
- music_name: "TAKE ON ME",
- play_type: "SINGLE",
- diff_type: "ANOTHER",
- score: 922,
- miss_count: 56,
- clear_type: "CLEAR",
- update_time: "2019-05-03 02:10:58",
- },
- ],
- },
- "Should correctly parse data."
- );
-
- t.end();
- });
-
- const baseScore = {
- music_id: 3007,
- version_id: 3,
- version_name: "3rd style",
- music_name: "Presto",
- play_type: "SINGLE",
- diff_type: "HYPER",
- score: 566,
- score_percent: 56.8273,
- miss_count: 46,
- grade: "B",
- clear_type: "NO PLAY",
- clear_type_id: 0,
- level: 8,
- note: 498,
- play_count: 6,
- update_time: "2019-06-01 19:56:59",
- score_diff_str: "B+12",
- };
-
- t.test("Should throw on invalid play_type", (t) => {
- t.throws(() => mrfj(deepmerge(baseScore, { play_type: "INVALID" })));
- t.throws(() => mrfj(deepmerge(baseScore, { play_type: null })));
- t.throws(() => mrfj(deepmerge(baseScore, { play_type: undefined })));
- t.throws(() => mrfj(deepmerge(baseScore, { play_type: 1 })));
-
- t.end();
- });
-
- t.test("Should throw on invalid score", (t) => {
- t.throws(() => mrfj(deepmerge(baseScore, { score: -1 })));
- t.throws(() => mrfj(deepmerge(baseScore, { score: 1.5 })));
- t.throws(() => mrfj(deepmerge(baseScore, { score: "1" })));
- t.throws(() => mrfj(deepmerge(baseScore, { score: null })));
- t.throws(() => mrfj(deepmerge(baseScore, { score: undefined })));
-
- t.end();
- });
-
- t.test("Should throw on invalid diff_type", (t) => {
- t.throws(() => mrfj(deepmerge(baseScore, { diff_type: "INVALID" })));
- t.throws(() => mrfj(deepmerge(baseScore, { diff_type: null })));
- t.throws(() => mrfj(deepmerge(baseScore, { diff_type: undefined })));
-
- t.end();
- });
-
- t.test("Should throw on invalid clear_type", (t) => {
- t.throws(() => mrfj(deepmerge(baseScore, { clear_type: "INVALID" })));
- t.throws(() => mrfj(deepmerge(baseScore, { clear_type: null })));
- t.throws(() => mrfj(deepmerge(baseScore, { clear_type: undefined })));
-
- t.end();
- });
-
- t.test("Should throw on invalid miss_count", (t) => {
- t.throws(() => mrfj(deepmerge(baseScore, { miss_count: "INVALID" })));
- t.throws(() => mrfj(deepmerge(baseScore, { miss_count: null })));
- t.throws(() => mrfj(deepmerge(baseScore, { miss_count: undefined })));
-
- t.end();
- });
-
- t.test("Should throw on invalid JSON", (t) => {
- t.throws(() => mrfb(Buffer.from("{]")));
-
- t.end();
- });
-
- t.test("Should throw on non-top-level-array", (t) => {
- t.throws(() => mrfb(Buffer.from("{}")));
-
- t.end();
- });
-
- t.test("Should throw on invalid Mer Scores", (t) => {
- t.throws(() => mrfb(Buffer.from(JSON.stringify([{ foo: "bar" }]))));
-
- t.end();
- });
-
- t.end();
-});
diff --git a/server/src/lib/score-import/import-types/file/mer-iidx/parser.ts b/server/src/lib/score-import/import-types/file/mer-iidx/parser.ts
deleted file mode 100644
index 59b2e7716..000000000
--- a/server/src/lib/score-import/import-types/file/mer-iidx/parser.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import ScoreImportFatalError from "../../../framework/score-importing/score-import-error";
-import { p } from "prudence";
-import { FormatPrError } from "utils/prudence";
-import type { ParserFunctionReturns } from "../../common/types";
-import type { MerScore } from "./types";
-import type { KtLogger } from "lib/logger/logger";
-import type { EmptyObject } from "utils/types";
-
-const PR_MER_IIDX = {
- music_id: p.isPositiveInteger,
- play_type: p.isIn("SINGLE", "DOUBLE"),
- diff_type: p.isIn("NORMAL", "HYPER", "ANOTHER", "LEGGENDARIA", "BEGINNER"),
- score: p.isPositiveInteger,
- miss_count: p.or(p.isPositiveInteger, p.is(-1)),
- clear_type: p.isIn(
- "NO PLAY",
- "FAILED",
- "ASSIST CLEAR",
- "EASY CLEAR",
- "CLEAR",
- "HARD CLEAR",
- "EX HARD CLEAR",
- "FULLCOMBO CLEAR"
- ),
- update_time: "string",
-};
-
-export function ParseMerIIDX(
- fileData: Express.Multer.File,
- body: Record,
- logger: KtLogger
-): ParserFunctionReturns {
- let jsonData;
-
- try {
- jsonData = JSON.parse(fileData.buffer.toString("utf-8")) as unknown;
- } catch (err) {
- logger.info((err as Error).message);
- throw new ScoreImportFatalError(400, "Invalid JSON.");
- }
-
- if (!Array.isArray(jsonData)) {
- throw new ScoreImportFatalError(400, `Invalid MER-IIDX JSON: Expected Top-Level Array.`);
- }
-
- // this is because prudence doesn't support top level arrays at the moment.
- for (let i = 0; i < jsonData.length; i++) {
- const err = p(jsonData[i], PR_MER_IIDX, {}, { allowExcessKeys: true });
-
- if (err) {
- throw new ScoreImportFatalError(400, `${FormatPrError(err)} [Index ${i}]`);
- }
- }
-
- return {
- classProvider: null,
- context: {},
- iterable: jsonData as Array,
- game: "iidx",
- };
-}
diff --git a/server/src/lib/score-import/import-types/file/mer-iidx/types.ts b/server/src/lib/score-import/import-types/file/mer-iidx/types.ts
deleted file mode 100644
index ff48aa930..000000000
--- a/server/src/lib/score-import/import-types/file/mer-iidx/types.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import type { integer } from "tachi-common";
-
-export interface MerScore {
- music_id: integer;
- play_type: "DOUBLE" | "SINGLE";
- diff_type: "ANOTHER" | "BEGINNER" | "HYPER" | "LEGGENDARIA" | "NORMAL";
- score: integer;
- miss_count: integer;
- clear_type:
- | "ASSIST CLEAR"
- | "CLEAR"
- | "EASY CLEAR"
- | "EX HARD CLEAR"
- | "FAILED"
- | "FULLCOMBO CLEAR"
- | "HARD CLEAR"
- | "NO PLAY";
- update_time: string;
-}
diff --git a/server/src/lib/score-import/import-types/parsers.ts b/server/src/lib/score-import/import-types/parsers.ts
index 8e6dce78c..d020a2fe4 100644
--- a/server/src/lib/score-import/import-types/parsers.ts
+++ b/server/src/lib/score-import/import-types/parsers.ts
@@ -17,7 +17,6 @@ import {
import ParseBatchManual from "./file/batch-manual/parser";
import ParseEamusementIIDXCSV from "./file/eamusement-iidx-csv/parser";
import ParseEamusementSDVXCSV from "./file/eamusement-sdvx-csv/parser";
-import { ParseMerIIDX } from "./file/mer-iidx/parser";
import ParsePLIIIDXCSV from "./file/pli-iidx-csv/parser";
import { ParseSolidStateXML } from "./file/solid-state-squad/parser";
import {
@@ -37,7 +36,6 @@ import { ParseIRUSC } from "./ir/usc/parser";
export const Parsers = {
"file/solid-state-squad": ParseSolidStateXML,
"file/batch-manual": ParseBatchManual,
- "file/mer-iidx": ParseMerIIDX,
"file/pli-iidx-csv": ParsePLIIIDXCSV,
"file/eamusement-iidx-csv": ParseEamusementIIDXCSV,
"file/eamusement-sdvx-csv": ParseEamusementSDVXCSV,
diff --git a/server/src/server/router/api/v1/import/router.test.ts b/server/src/server/router/api/v1/import/router.test.ts
index 31a680fb0..44baf9514 100644
--- a/server/src/server/router/api/v1/import/router.test.ts
+++ b/server/src/server/router/api/v1/import/router.test.ts
@@ -301,44 +301,6 @@ t.test("POST /api/v1/import/file", async (t) => {
t.end();
});
- t.test("file/mer-iidx", (t) => {
- t.beforeEach(LoadTachiIIDXData);
-
- t.test("Example Import", async (t) => {
- const res = await mockApi
- .post("/api/v1/import/file")
- .set("Cookie", cookie)
- .attach("scoreData", GetKTDataBuffer("./mer/base.json"), "base.json")
- .field("importType", "file/mer-iidx");
-
- t.equal(res.body.success, true, "Should be successful");
-
- t.equal(res.body.body.errors.length, 0, "Import Should have 0 failed scores.");
-
- t.equal(res.body.body.scoreIDs.length, 3, "Should have 3 successful scores.");
-
- t.end();
- });
-
- t.test("Example Import", async (t) => {
- const res = await mockApi
- .post("/api/v1/import/file")
- .set("Cookie", cookie)
- .attach("scoreData", GetKTDataBuffer("./mer/large.json"), "base.json")
- .field("importType", "file/mer-iidx");
-
- t.equal(res.body.success, true, "Should be successful");
-
- t.equal(res.body.body.errors.length, 0, "Import Should have 0 failed scores.");
-
- t.equal(res.body.body.scoreIDs.length, 627, "Should have 627 successful scores.");
-
- t.end();
- });
-
- t.end();
- });
-
t.skip("file/solid-state-squad", (t) => {
t.beforeEach(LoadTachiIIDXData);
diff --git a/server/test.conf.json5 b/server/test.conf.json5
index 856fd723e..4a6c152c1 100644
--- a/server/test.conf.json5
+++ b/server/test.conf.json5
@@ -55,7 +55,6 @@
"file/eamusement-iidx-csv",
"file/batch-manual",
"file/solid-state-squad",
- "file/mer-iidx",
"file/pli-iidx-csv",
"ir/direct-manual",
"ir/barbatos",