diff --git a/src/main/resources/db/migration/mariadb/V249__maimai2_tickets.sql b/src/main/resources/db/migration/mariadb/V249__maimai2_tickets.sql new file mode 100644 index 00000000..48434667 --- /dev/null +++ b/src/main/resources/db/migration/mariadb/V249__maimai2_tickets.sql @@ -0,0 +1,37 @@ + +CREATE TABLE `maimai2_game_ticket` ( + `id` bigint(20) NOT NULL, + `name` varchar(255) NOT NULL, + `credits` int(8) NOT NULL, + `kind` varchar(255) NOT NULL, + `max` int(16) NOT NULL, + `detail` varchar(255) NOT NULL, + `event_id` bigint(20) NOT NULL, + `event_name` varchar(255) NOT NULL +); + +INSERT INTO `maimai2_game_ticket` (`id`, `name`, `credits`, `kind`, `max`, `detail`, `event_id`, `event_name`) VALUES +(0, '使用しない', 0, 'None', 0, 'チケットを使用しません', 1, '無期限常時解放'), +(2, '2倍チケット', 1, 'Paid', 0, '2倍チケット', 1, '無期限常時解放'), +(3, '3倍チケット', 2, 'Paid', 0, '3倍チケット', 1, '無期限常時解放'), +(4, '4倍チケット', 3, 'Paid', 0, '4倍チケット', 0, '解放なし'), +(5, '5倍チケット', 4, 'Paid', 0, '5倍チケット', 24021661, '240216_06_1:有料5倍チケット解放'), +(6, '6倍チケット', 5, 'Paid', 0, '6倍チケット', 0, '解放なし'), +(10001, 'イベント1.5倍チケット_1', 0, 'Event', 1, '期限付き1.5倍チケット', 0, '解放なし'), +(10002, 'イベント2倍チケット_1', 0, 'Event', 1, '期限付き2倍チケット', 0, '解放なし'), +(10003, 'イベント3倍チケット_1', 0, 'Event', 1, '期限付き3倍チケット', 0, '解放なし'), +(10005, 'イベント5倍チケット_1', 0, 'Event', 1, '期限付き5倍チケット', 23091461, '230914_06_1:イベント5倍チケット配布_1(1.40予備)'), +(10101, 'イベント1.5倍チケット_2', 0, 'Event', 1, '期限付き1.5倍チケット', 0, '解放なし'), +(10102, 'イベント2倍チケット_2', 0, 'Event', 1, '期限付き2倍チケット', 0, '解放なし'), +(10103, 'イベント3倍チケット_2', 0, 'Event', 1, '期限付き3倍チケット', 0, '解放なし'), +(10105, 'イベント5倍チケット_2', 0, 'Event', 1, '期限付き5倍チケット', 23091462, '230914_06_2:イベント5倍チケット配布_2(1.40予備)'), +(10201, 'イベント1.5倍チケット_3', 0, 'Event', 1, '期限付き1.5倍チケット', 0, '解放なし'), +(10202, 'イベント2倍チケット_3', 0, 'Event', 1, '期限付き2倍チケット', 0, '解放なし'), +(10203, 'イベント3倍チケット_3', 0, 'Event', 1, '期限付き3倍チケット', 0, '解放なし'), +(10205, 'イベント5倍チケット_3', 0, 'Event', 1, '期限付き5倍チケット', 23032362, '230323_06_2:イベント5倍チケット配布_3(予備)'), +(11001, '無料1.5倍チケット', 0, 'Free', 5, 'ちほー進行1.5倍チケット', 1, '無期限常時解放'), +(11002, '無料2倍チケット', 0, 'Free', 5, 'ちほー進行2倍チケット', 0, '解放なし'), +(11003, '無料3倍チケット', 0, 'Free', 5, 'ちほー進行3倍チケット', 0, '解放なし'), +(11005, '無料5倍チケット', 0, 'Free', 5, 'ちほー進行5倍チケット', 0, '解放なし'), +(20010, '無料10倍チケット', 0, 'Free', 99, 'ちほー進行10倍チケット', 0, '解放なし'), +(20020, '無料20倍チケット', 0, 'Free', 99, 'ちほー進行20倍チケット', 0, '解放なし'); diff --git a/src/main/resources/db/migration/mysql/V249__maimai2_tickets.sql b/src/main/resources/db/migration/mysql/V249__maimai2_tickets.sql new file mode 100644 index 00000000..48434667 --- /dev/null +++ b/src/main/resources/db/migration/mysql/V249__maimai2_tickets.sql @@ -0,0 +1,37 @@ + +CREATE TABLE `maimai2_game_ticket` ( + `id` bigint(20) NOT NULL, + `name` varchar(255) NOT NULL, + `credits` int(8) NOT NULL, + `kind` varchar(255) NOT NULL, + `max` int(16) NOT NULL, + `detail` varchar(255) NOT NULL, + `event_id` bigint(20) NOT NULL, + `event_name` varchar(255) NOT NULL +); + +INSERT INTO `maimai2_game_ticket` (`id`, `name`, `credits`, `kind`, `max`, `detail`, `event_id`, `event_name`) VALUES +(0, '使用しない', 0, 'None', 0, 'チケットを使用しません', 1, '無期限常時解放'), +(2, '2倍チケット', 1, 'Paid', 0, '2倍チケット', 1, '無期限常時解放'), +(3, '3倍チケット', 2, 'Paid', 0, '3倍チケット', 1, '無期限常時解放'), +(4, '4倍チケット', 3, 'Paid', 0, '4倍チケット', 0, '解放なし'), +(5, '5倍チケット', 4, 'Paid', 0, '5倍チケット', 24021661, '240216_06_1:有料5倍チケット解放'), +(6, '6倍チケット', 5, 'Paid', 0, '6倍チケット', 0, '解放なし'), +(10001, 'イベント1.5倍チケット_1', 0, 'Event', 1, '期限付き1.5倍チケット', 0, '解放なし'), +(10002, 'イベント2倍チケット_1', 0, 'Event', 1, '期限付き2倍チケット', 0, '解放なし'), +(10003, 'イベント3倍チケット_1', 0, 'Event', 1, '期限付き3倍チケット', 0, '解放なし'), +(10005, 'イベント5倍チケット_1', 0, 'Event', 1, '期限付き5倍チケット', 23091461, '230914_06_1:イベント5倍チケット配布_1(1.40予備)'), +(10101, 'イベント1.5倍チケット_2', 0, 'Event', 1, '期限付き1.5倍チケット', 0, '解放なし'), +(10102, 'イベント2倍チケット_2', 0, 'Event', 1, '期限付き2倍チケット', 0, '解放なし'), +(10103, 'イベント3倍チケット_2', 0, 'Event', 1, '期限付き3倍チケット', 0, '解放なし'), +(10105, 'イベント5倍チケット_2', 0, 'Event', 1, '期限付き5倍チケット', 23091462, '230914_06_2:イベント5倍チケット配布_2(1.40予備)'), +(10201, 'イベント1.5倍チケット_3', 0, 'Event', 1, '期限付き1.5倍チケット', 0, '解放なし'), +(10202, 'イベント2倍チケット_3', 0, 'Event', 1, '期限付き2倍チケット', 0, '解放なし'), +(10203, 'イベント3倍チケット_3', 0, 'Event', 1, '期限付き3倍チケット', 0, '解放なし'), +(10205, 'イベント5倍チケット_3', 0, 'Event', 1, '期限付き5倍チケット', 23032362, '230323_06_2:イベント5倍チケット配布_3(予備)'), +(11001, '無料1.5倍チケット', 0, 'Free', 5, 'ちほー進行1.5倍チケット', 1, '無期限常時解放'), +(11002, '無料2倍チケット', 0, 'Free', 5, 'ちほー進行2倍チケット', 0, '解放なし'), +(11003, '無料3倍チケット', 0, 'Free', 5, 'ちほー進行3倍チケット', 0, '解放なし'), +(11005, '無料5倍チケット', 0, 'Free', 5, 'ちほー進行5倍チケット', 0, '解放なし'), +(20010, '無料10倍チケット', 0, 'Free', 99, 'ちほー進行10倍チケット', 0, '解放なし'), +(20020, '無料20倍チケット', 0, 'Free', 99, 'ちほー進行20倍チケット', 0, '解放なし'); diff --git a/src/main/resources/db/migration/sqlite/V249__maimai2_tickets.sql b/src/main/resources/db/migration/sqlite/V249__maimai2_tickets.sql new file mode 100644 index 00000000..bbde7f8e --- /dev/null +++ b/src/main/resources/db/migration/sqlite/V249__maimai2_tickets.sql @@ -0,0 +1,45 @@ +CREATE TABLE "maimai2_game_ticket" ( + "id" INTEGER(20) NOT NULL, + "name" TEXT(255) NOT NULL, + "credits" INTEGER(8) NOT NULL, + "kind" TEXT(255) NOT NULL, + "max" INTEGER(16) NOT NULL, + "detail" TEXT(255) NOT NULL, + "event_id" INTEGER(20) NOT NULL, + "event_name" TEXT(255) NOT NULL +); +INSERT INTO "maimai2_game_ticket" ( + "id", + "name", + "credits", + "kind", + "max", + "detail", + "event_id", + "event_name" +) +VALUES + (0, '使用しない', 0, 'None', 0, 'チケットを使用しません', 1, '無期限常時解放'), + (2, '2倍チケット', 1, 'Paid', 0, '2倍チケット', 1, '無期限常時解放'), + (3, '3倍チケット', 2, 'Paid', 0, '3倍チケット', 1, '無期限常時解放'), + (4, '4倍チケット', 3, 'Paid', 0, '4倍チケット', 0, '解放なし'), + (5, '5倍チケット', 4, 'Paid', 0, '5倍チケット', 24021661, '240216_06_1:有料5倍チケット解放'), + (6, '6倍チケット', 5, 'Paid', 0, '6倍チケット', 0, '解放なし'), + (10001, 'イベント1.5倍チケット_1', 0, 'Event', 1, '期限付き1.5倍チケット', 0, '解放なし'), + (10002, 'イベント2倍チケット_1', 0, 'Event', 1, '期限付き2倍チケット', 0, '解放なし'), + (10003, 'イベント3倍チケット_1', 0, 'Event', 1, '期限付き3倍チケット', 0, '解放なし'), + (10005, 'イベント5倍チケット_1', 0, 'Event', 1, '期限付き5倍チケット', 23091461, '230914_06_1:イベント5倍チケット配布_1(1.40予備)'), + (10101, 'イベント1.5倍チケット_2', 0, 'Event', 1, '期限付き1.5倍チケット', 0, '解放なし'), + (10102, 'イベント2倍チケット_2', 0, 'Event', 1, '期限付き2倍チケット', 0, '解放なし'), + (10103, 'イベント3倍チケット_2', 0, 'Event', 1, '期限付き3倍チケット', 0, '解放なし'), + (10105, 'イベント5倍チケット_2', 0, 'Event', 1, '期限付き5倍チケット', 23091462, '230914_06_2:イベント5倍チケット配布_2(1.40予備)'), + (10201, 'イベント1.5倍チケット_3', 0, 'Event', 1, '期限付き1.5倍チケット', 0, '解放なし'), + (10202, 'イベント2倍チケット_3', 0, 'Event', 1, '期限付き2倍チケット', 0, '解放なし'), + (10203, 'イベント3倍チケット_3', 0, 'Event', 1, '期限付き3倍チケット', 0, '解放なし'), + (10205, 'イベント5倍チケット_3', 0, 'Event', 1, '期限付き5倍チケット', 23032362, '230323_06_2:イベント5倍チケット配布_3(予備)'), + (11001, '無料1.5倍チケット', 0, 'Free', 5, 'ちほー進行1.5倍チケット', 1, '無期限常時解放'), + (11002, '無料2倍チケット', 0, 'Free', 5, 'ちほー進行2倍チケット', 0, '解放なし'), + (11003, '無料3倍チケット', 0, 'Free', 5, 'ちほー進行3倍チケット', 0, '解放なし'), + (11005, '無料5倍チケット', 0, 'Free', 5, 'ちほー進行5倍チケット', 0, '解放なし'), + (20010, '無料10倍チケット', 0, 'Free', 99, 'ちほー進行10倍チケット', 0, '解放なし'), + (20020, '無料20倍チケット', 0, 'Free', 99, 'ちほー進行20倍チケット', 0, '解放なし'); diff --git a/tools/maimai_convert.py b/tools/maimai_convert.py index 080eb189..bae4ec4e 100644 --- a/tools/maimai_convert.py +++ b/tools/maimai_convert.py @@ -3,6 +3,7 @@ from pathlib import Path from typing import NamedTuple import pandas as pd +import sqlglot import xmltodict from hypy_utils import write @@ -56,20 +57,55 @@ def parse_event(d: dict) -> Event: ) +def add_migration(f_name: str, mysql: str): + (migration_path / 'mysql' / f_name).write_text(mysql) + (migration_path / 'mariadb' / f_name).write_text(mysql) + + # Translate to sqlite + sqlite = sqlglot.transpile(mysql, read='mysql', write='sqlite', pretty=True) + (migration_path / 'sqlite' / f_name).write_text(';\n'.join(sqlite) + ';\n') + + if __name__ == '__main__': agupa = argparse.ArgumentParser(description='Convert maimai data to csv') agupa.add_argument('path', type=Path, help='Path to A000 data folder') args = agupa.parse_args() path = Path(args.path) + src = Path(__file__).parent.parent tickets = read_list('ticket', '*/Ticket.xml', parse_ticket) events = read_list('event', '*/Event.xml', parse_event) # Write incremental sql - ids = [int(v.split(",")[0]) for v in (Path(__file__).parent / 'maimai2_game_event.csv').read_text().splitlines()] - new_events = [e for e in events if e.id not in ids] - sql = "INSERT INTO `maimai2_game_event` (`id`, `end_date`, `start_date`, `type`, `enable`) VALUES \n" + \ - ",\n".join([f"({e.id}, '2029-01-01 00:00:00.000000', '2019-01-01 00:00:00.000000', {e.type}, '1')" for e in new_events]) + # ids = [int(v.split(",")[0]) for v in (Path(__file__).parent / 'maimai2_game_event.csv').read_text().splitlines()] + # new_events = [e for e in events if e.id not in ids] + # sql = "INSERT INTO `maimai2_game_event` (`id`, `end_date`, `start_date`, `type`, `enable`) VALUES \n" + \ + # ",\n".join([f"({e.id}, '2029-01-01 00:00:00.000000', '2019-01-01 00:00:00.000000', {e.type}, '1')" for e in new_events]) + # sql += ";\n" + # write('sql/maimai2_game_event.sql', sql) + + # Find the highest V{}__*.sql file in src/main/resources/db/migration/sqlite + migration_path = src / 'src/main/resources/db/migration' + last_sql_version = max([int(v.name[1:].split("__")[0]) for v in (migration_path / 'sqlite').glob('V*__*.sql')]) + last_sql_version = 248 + print(f"Last sql version: {last_sql_version}") + + # Write ticket sql + sql = """ +CREATE TABLE `maimai2_game_ticket` ( + `id` bigint(20) NOT NULL, + `name` varchar(255) NOT NULL, + `credits` int(8) NOT NULL, + `kind` varchar(255) NOT NULL, + `max` int(16) NOT NULL, + `detail` varchar(255) NOT NULL, + `event_id` bigint(20) NOT NULL, + `event_name` varchar(255) NOT NULL +);\n\n""" + sql += "INSERT INTO `maimai2_game_ticket` (`id`, `name`, `credits`, `kind`, `max`, `detail`, `event_id`, `event_name`) VALUES \n" + \ + ",\n".join([f"({t.id}, '{t.name}', {t.credits}, '{t.kind}', {t.max}, '{t.detail}', {t.eventId}, '{t.eventName}')" for t in tickets]) sql += ";\n" - write('sql/maimai2_game_event.sql', sql) + add_migration(f"V{last_sql_version + 1}__maimai2_tickets.sql", sql) + +