From 401debee837f0cb9ebb1206d9dbb55f7b2a104e9 Mon Sep 17 00:00:00 2001
From: asesidaa <1061472754@qq.com>
Date: Sat, 16 Nov 2024 01:48:16 +0800
Subject: [PATCH] Start refactor structure
---
Application/Application.csproj | 14 +
Domain/Common/Constants.cs | 32 +
Domain/Domain.csproj | 9 +
Domain/Entities/AiScoreDatum.cs | 18 +
Domain/Entities/AiSectionScoreDatum.cs | 30 +
Domain/Entities/Card.cs | 10 +
Domain/Entities/Credential.cs | 11 +
Domain/Entities/DanScoreDatum.cs | 17 +
Domain/Entities/DanStageScoreDatum.cs | 32 +
Domain/Entities/SongBestDatum.cs | 16 +
Domain/Entities/SongBestDatumMethods.cs | 29 +
Domain/Entities/SongPlayDatum.cs | 28 +
Domain/Entities/Token.cs | 12 +
Domain/Entities/UserDatum.cs | 53 ++
Domain/Enums/CrownType.cs | 9 +
Domain/Enums/DanBorderType.cs | 7 +
Domain/Enums/DanClearState.cs | 12 +
Domain/Enums/DanConditionType.cs | 13 +
Domain/Enums/DanType.cs | 7 +
Domain/Enums/Difficulty.cs | 12 +
Domain/Enums/NameLanguage.cs | 10 +
Domain/Enums/PlayMode.cs | 9 +
Domain/Enums/RandomType.cs | 9 +
Domain/Enums/ScoreRank.cs | 13 +
Domain/Enums/SongGenre.cs | 13 +
Domain/Models/AiSectionBestData.cs | 22 +
Domain/Models/Costume.cs | 13 +
Domain/Models/DanBestData.cs | 16 +
Domain/Models/DanBestStageData.cs | 22 +
Domain/Models/DanData.cs | 66 ++
Domain/Models/EventFolderData.cs | 21 +
Domain/Models/IVerupNo.cs | 6 +
Domain/Models/MovieData.cs | 12 +
Domain/Models/MusicDetail.cs | 28 +
Domain/Models/PlaySetting.cs | 14 +
Domain/Models/QRCodeData.cs | 10 +
Domain/Models/ShopFolderData.cs | 12 +
Domain/Models/SongBestData.cs | 52 ++
Domain/Models/SongHistoryData.cs | 48 ++
Domain/Models/SongIntroductionData.cs | 18 +
Domain/Models/SongLeaderboard.cs | 27 +
Domain/Models/SongPlayDatumDto.cs | 23 +
Domain/Models/Title.cs | 25 +
Domain/Models/User.cs | 12 +
Domain/Models/UserCredential.cs | 10 +
Domain/Models/UserSetting.cs | 68 +++
Domain/Settings/AuthSettings.cs | 12 +
Domain/Settings/DataSettings.cs | 26 +
Domain/Settings/ServerSettings.cs | 14 +
GameDatabase/Context/TaikoDbContext.cs | 3 +
GameDatabase/Entities/UserDatum.cs | 2 +
GameDatabase/GameDatabase.csproj | 6 +-
.../Infrastructure.csproj | 19 +-
.../20220825070549_Initial.Designer.cs | 222 +++++++
.../Migrations/20220825070549_Initial.cs | 143 +++++
.../20220827163841_FirstMigration.Designer.cs | 225 +++++++
.../20220827163841_FirstMigration.cs | 29 +
.../20220828101620_AddDanDbTest.Designer.cs | 322 ++++++++++
.../Migrations/20220828101620_AddDanDbTest.cs | 79 +++
.../20220828171353_AddClearState.Designer.cs | 327 ++++++++++
.../20220828171353_AddClearState.cs | 29 +
.../20220829101052_AdjustDanDb.Designer.cs | 332 ++++++++++
.../Migrations/20220829101052_AdjustDanDb.cs | 79 +++
.../20220829124927_FixNavigation.Designer.cs | 320 ++++++++++
.../20220829124927_FixNavigation.cs | 58 ++
.../20220905132703_AddMoreOptions.Designer.cs | 326 ++++++++++
.../20220905132703_AddMoreOptions.cs | 40 ++
...0220910055624_AddDrumrollCount.Designer.cs | 329 ++++++++++
.../20220910055624_AddDrumrollCount.cs | 29 +
.../20220914054039_AddRewardFlgs.Designer.cs | 341 +++++++++++
.../20220914054039_AddRewardFlgs.cs | 51 ++
...220916121143_AddGenericInfoFlg.Designer.cs | 345 +++++++++++
.../20220916121143_AddGenericInfoFlg.cs | 29 +
.../20220917180457_AddAiBattle.Designer.cs | 432 +++++++++++++
.../Migrations/20220917180457_AddAiBattle.cs | 71 +++
...19022643_AddWinCountToUserdata.Designer.cs | 435 +++++++++++++
.../20220919022643_AddWinCountToUserdata.cs | 29 +
...ndUnlockedSongIdListToUserdata.Designer.cs | 443 ++++++++++++++
...ountDictAndUnlockedSongIdListToUserdata.cs | 40 ++
...fficultySettingArrayToUserData.Designer.cs | 451 ++++++++++++++
...rrayAndDifficultySettingArrayToUserData.cs | 40 ++
...AddMyDonNameLanguageToUserData.Designer.cs | 454 ++++++++++++++
...18101009_AddMyDonNameLanguageToUserData.cs | 29 +
...50650_AddPasswordAndSaltToCard.Designer.cs | 462 ++++++++++++++
...20230928150650_AddPasswordAndSaltToCard.cs | 40 ++
.../20231017102350_AddDanType.Designer.cs | 472 ++++++++++++++
.../Migrations/20231017102350_AddDanType.cs | 102 ++++
...31111154748_AddCredentialTable.Designer.cs | 491 +++++++++++++++
.../20231111154748_AddCredentialTable.cs | 35 ++
...sswordSaltFromCardToCredential.Designer.cs | 491 +++++++++++++++
...16_CopyPasswordSaltFromCardToCredential.cs | 30 +
...305_RemovePasswordSaltFromCard.Designer.cs | 483 +++++++++++++++
...231111155305_RemovePasswordSaltFromCard.cs | 40 ++
...0_RemoveBaidUniquenessFromCard.Designer.cs | 491 +++++++++++++++
...1111164910_RemoveBaidUniquenessFromCard.cs | 58 ++
...534_AlterForeignKeyToUserDatum.Designer.cs | 488 +++++++++++++++
...231111225534_AlterForeignKeyToUserDatum.cs | 198 ++++++
...18152045_AddIsAdminToUserDatum.Designer.cs | 491 +++++++++++++++
.../20231218152045_AddIsAdminToUserDatum.cs | 29 +
.../20240309102758_SeparateTokens.Designer.cs | 519 ++++++++++++++++
.../20240309102758_SeparateTokens.cs | 76 +++
...0316064531_SplitCostumeUnlocks.Designer.cs | 539 ++++++++++++++++
.../20240316064531_SplitCostumeUnlocks.cs | 138 +++++
...0317153533_SplitCurrentCostume.Designer.cs | 554 +++++++++++++++++
.../20240317153533_SplitCurrentCostume.cs | 82 +++
...17163817_SplitDifficultyArrays.Designer.cs | 572 +++++++++++++++++
.../20240317163817_SplitDifficultyArrays.cs | 97 +++
...20241024092832_ReHashPasswords.Designer.cs | 572 +++++++++++++++++
.../20241024092832_ReHashPasswords.cs | 53 ++
...lockedUraSongIdListToUserDatum.Designer.cs | 576 ++++++++++++++++++
...142_AddUnlockedUraSongIdListToUserDatum.cs | 29 +
...41108132749_RemoveUnusedArrays.Designer.cs | 576 ++++++++++++++++++
.../20241108132749_RemoveUnusedArrays.cs | 66 ++
.../Migrations/TaikoDbContextModelSnapshot.cs | 573 +++++++++++++++++
Infrastructure/Persistence/TaikoDbContext.cs | 137 +++++
.../Persistence/TaikoDbContextPartial.cs | 76 +++
Infrastructure/Utils/PathHelper.cs | 29 +
Infrastructure/Utils/PlaySettingConverter.cs | 46 ++
Infrastructure/Utils/ValueHelpers.cs | 14 +
.../DateTimeConverter.cs | 22 -
LocalSaveModScoreMigrator/MusicInfo.cs | 8 -
LocalSaveModScoreMigrator/MusicInfoEntry.cs | 10 -
LocalSaveModScoreMigrator/PlayRecordJson.cs | 21 -
LocalSaveModScoreMigrator/Program.cs | 196 ------
.../ScoreRankConverter.cs | 22 -
SharedProject/Models/UserSetting.cs | 22 +-
TaikoLocalServer.sln | 22 +-
.../Controllers/Api/AuthController.cs | 9 +-
.../Controllers/Api/UserSettingsController.cs | 68 +--
.../Controllers/Api/UsersController.cs | 25 +-
.../Conventions/ControllerHidingConvention.cs | 14 +
TaikoLocalServer/Mappers/UserSettingMapper.cs | 33 +
.../Middlewares/AllNetRequestMiddleware.cs | 9 +-
TaikoLocalServer/Models/MusicOrder.cs | 2 +-
TaikoLocalServer/Models/MusicOrderEntry.cs | 2 +-
TaikoLocalServer/Models/WordList.cs | 2 +-
TaikoLocalServer/Models/WordListEntry.cs | 2 +-
TaikoLocalServer/Program.cs | 74 ++-
TaikoLocalServer/Services/AuthService.cs | 54 +-
TaikoLocalServer/Services/GameDataService.cs | 1 -
TaikoLocalServer/TaikoLocalServer.csproj | 14 +-
.../Components/Song/SongLeaderboardCard.razor | 44 +-
TaikoWebUI/Pages/Profile.razor | 52 +-
TaikoWebUI/TaikoWebUI.csproj | 11 +-
144 files changed, 17110 insertions(+), 465 deletions(-)
create mode 100644 Application/Application.csproj
create mode 100644 Domain/Common/Constants.cs
create mode 100644 Domain/Domain.csproj
create mode 100644 Domain/Entities/AiScoreDatum.cs
create mode 100644 Domain/Entities/AiSectionScoreDatum.cs
create mode 100644 Domain/Entities/Card.cs
create mode 100644 Domain/Entities/Credential.cs
create mode 100644 Domain/Entities/DanScoreDatum.cs
create mode 100644 Domain/Entities/DanStageScoreDatum.cs
create mode 100644 Domain/Entities/SongBestDatum.cs
create mode 100644 Domain/Entities/SongBestDatumMethods.cs
create mode 100644 Domain/Entities/SongPlayDatum.cs
create mode 100644 Domain/Entities/Token.cs
create mode 100644 Domain/Entities/UserDatum.cs
create mode 100644 Domain/Enums/CrownType.cs
create mode 100644 Domain/Enums/DanBorderType.cs
create mode 100644 Domain/Enums/DanClearState.cs
create mode 100644 Domain/Enums/DanConditionType.cs
create mode 100644 Domain/Enums/DanType.cs
create mode 100644 Domain/Enums/Difficulty.cs
create mode 100644 Domain/Enums/NameLanguage.cs
create mode 100644 Domain/Enums/PlayMode.cs
create mode 100644 Domain/Enums/RandomType.cs
create mode 100644 Domain/Enums/ScoreRank.cs
create mode 100644 Domain/Enums/SongGenre.cs
create mode 100644 Domain/Models/AiSectionBestData.cs
create mode 100644 Domain/Models/Costume.cs
create mode 100644 Domain/Models/DanBestData.cs
create mode 100644 Domain/Models/DanBestStageData.cs
create mode 100644 Domain/Models/DanData.cs
create mode 100644 Domain/Models/EventFolderData.cs
create mode 100644 Domain/Models/IVerupNo.cs
create mode 100644 Domain/Models/MovieData.cs
create mode 100644 Domain/Models/MusicDetail.cs
create mode 100644 Domain/Models/PlaySetting.cs
create mode 100644 Domain/Models/QRCodeData.cs
create mode 100644 Domain/Models/ShopFolderData.cs
create mode 100644 Domain/Models/SongBestData.cs
create mode 100644 Domain/Models/SongHistoryData.cs
create mode 100644 Domain/Models/SongIntroductionData.cs
create mode 100644 Domain/Models/SongLeaderboard.cs
create mode 100644 Domain/Models/SongPlayDatumDto.cs
create mode 100644 Domain/Models/Title.cs
create mode 100644 Domain/Models/User.cs
create mode 100644 Domain/Models/UserCredential.cs
create mode 100644 Domain/Models/UserSetting.cs
create mode 100644 Domain/Settings/AuthSettings.cs
create mode 100644 Domain/Settings/DataSettings.cs
create mode 100644 Domain/Settings/ServerSettings.cs
rename LocalSaveModScoreMigrator/LocalSaveModScoreMigrator.csproj => Infrastructure/Infrastructure.csproj (52%)
create mode 100644 Infrastructure/Migrations/20220825070549_Initial.Designer.cs
create mode 100644 Infrastructure/Migrations/20220825070549_Initial.cs
create mode 100644 Infrastructure/Migrations/20220827163841_FirstMigration.Designer.cs
create mode 100644 Infrastructure/Migrations/20220827163841_FirstMigration.cs
create mode 100644 Infrastructure/Migrations/20220828101620_AddDanDbTest.Designer.cs
create mode 100644 Infrastructure/Migrations/20220828101620_AddDanDbTest.cs
create mode 100644 Infrastructure/Migrations/20220828171353_AddClearState.Designer.cs
create mode 100644 Infrastructure/Migrations/20220828171353_AddClearState.cs
create mode 100644 Infrastructure/Migrations/20220829101052_AdjustDanDb.Designer.cs
create mode 100644 Infrastructure/Migrations/20220829101052_AdjustDanDb.cs
create mode 100644 Infrastructure/Migrations/20220829124927_FixNavigation.Designer.cs
create mode 100644 Infrastructure/Migrations/20220829124927_FixNavigation.cs
create mode 100644 Infrastructure/Migrations/20220905132703_AddMoreOptions.Designer.cs
create mode 100644 Infrastructure/Migrations/20220905132703_AddMoreOptions.cs
create mode 100644 Infrastructure/Migrations/20220910055624_AddDrumrollCount.Designer.cs
create mode 100644 Infrastructure/Migrations/20220910055624_AddDrumrollCount.cs
create mode 100644 Infrastructure/Migrations/20220914054039_AddRewardFlgs.Designer.cs
create mode 100644 Infrastructure/Migrations/20220914054039_AddRewardFlgs.cs
create mode 100644 Infrastructure/Migrations/20220916121143_AddGenericInfoFlg.Designer.cs
create mode 100644 Infrastructure/Migrations/20220916121143_AddGenericInfoFlg.cs
create mode 100644 Infrastructure/Migrations/20220917180457_AddAiBattle.Designer.cs
create mode 100644 Infrastructure/Migrations/20220917180457_AddAiBattle.cs
create mode 100644 Infrastructure/Migrations/20220919022643_AddWinCountToUserdata.Designer.cs
create mode 100644 Infrastructure/Migrations/20220919022643_AddWinCountToUserdata.cs
create mode 100644 Infrastructure/Migrations/20230916161613_AddTokenCountDictAndUnlockedSongIdListToUserdata.Designer.cs
create mode 100644 Infrastructure/Migrations/20230916161613_AddTokenCountDictAndUnlockedSongIdListToUserdata.cs
create mode 100644 Infrastructure/Migrations/20230918052543_AddDifficultyPlayedArrayAndDifficultySettingArrayToUserData.Designer.cs
create mode 100644 Infrastructure/Migrations/20230918052543_AddDifficultyPlayedArrayAndDifficultySettingArrayToUserData.cs
create mode 100644 Infrastructure/Migrations/20230918101009_AddMyDonNameLanguageToUserData.Designer.cs
create mode 100644 Infrastructure/Migrations/20230918101009_AddMyDonNameLanguageToUserData.cs
create mode 100644 Infrastructure/Migrations/20230928150650_AddPasswordAndSaltToCard.Designer.cs
create mode 100644 Infrastructure/Migrations/20230928150650_AddPasswordAndSaltToCard.cs
create mode 100644 Infrastructure/Migrations/20231017102350_AddDanType.Designer.cs
create mode 100644 Infrastructure/Migrations/20231017102350_AddDanType.cs
create mode 100644 Infrastructure/Migrations/20231111154748_AddCredentialTable.Designer.cs
create mode 100644 Infrastructure/Migrations/20231111154748_AddCredentialTable.cs
create mode 100644 Infrastructure/Migrations/20231111155016_CopyPasswordSaltFromCardToCredential.Designer.cs
create mode 100644 Infrastructure/Migrations/20231111155016_CopyPasswordSaltFromCardToCredential.cs
create mode 100644 Infrastructure/Migrations/20231111155305_RemovePasswordSaltFromCard.Designer.cs
create mode 100644 Infrastructure/Migrations/20231111155305_RemovePasswordSaltFromCard.cs
create mode 100644 Infrastructure/Migrations/20231111164910_RemoveBaidUniquenessFromCard.Designer.cs
create mode 100644 Infrastructure/Migrations/20231111164910_RemoveBaidUniquenessFromCard.cs
create mode 100644 Infrastructure/Migrations/20231111225534_AlterForeignKeyToUserDatum.Designer.cs
create mode 100644 Infrastructure/Migrations/20231111225534_AlterForeignKeyToUserDatum.cs
create mode 100644 Infrastructure/Migrations/20231218152045_AddIsAdminToUserDatum.Designer.cs
create mode 100644 Infrastructure/Migrations/20231218152045_AddIsAdminToUserDatum.cs
create mode 100644 Infrastructure/Migrations/20240309102758_SeparateTokens.Designer.cs
create mode 100644 Infrastructure/Migrations/20240309102758_SeparateTokens.cs
create mode 100644 Infrastructure/Migrations/20240316064531_SplitCostumeUnlocks.Designer.cs
create mode 100644 Infrastructure/Migrations/20240316064531_SplitCostumeUnlocks.cs
create mode 100644 Infrastructure/Migrations/20240317153533_SplitCurrentCostume.Designer.cs
create mode 100644 Infrastructure/Migrations/20240317153533_SplitCurrentCostume.cs
create mode 100644 Infrastructure/Migrations/20240317163817_SplitDifficultyArrays.Designer.cs
create mode 100644 Infrastructure/Migrations/20240317163817_SplitDifficultyArrays.cs
create mode 100644 Infrastructure/Migrations/20241024092832_ReHashPasswords.Designer.cs
create mode 100644 Infrastructure/Migrations/20241024092832_ReHashPasswords.cs
create mode 100644 Infrastructure/Migrations/20241106173142_AddUnlockedUraSongIdListToUserDatum.Designer.cs
create mode 100644 Infrastructure/Migrations/20241106173142_AddUnlockedUraSongIdListToUserDatum.cs
create mode 100644 Infrastructure/Migrations/20241108132749_RemoveUnusedArrays.Designer.cs
create mode 100644 Infrastructure/Migrations/20241108132749_RemoveUnusedArrays.cs
create mode 100644 Infrastructure/Migrations/TaikoDbContextModelSnapshot.cs
create mode 100644 Infrastructure/Persistence/TaikoDbContext.cs
create mode 100644 Infrastructure/Persistence/TaikoDbContextPartial.cs
create mode 100644 Infrastructure/Utils/PathHelper.cs
create mode 100644 Infrastructure/Utils/PlaySettingConverter.cs
create mode 100644 Infrastructure/Utils/ValueHelpers.cs
delete mode 100644 LocalSaveModScoreMigrator/DateTimeConverter.cs
delete mode 100644 LocalSaveModScoreMigrator/MusicInfo.cs
delete mode 100644 LocalSaveModScoreMigrator/MusicInfoEntry.cs
delete mode 100644 LocalSaveModScoreMigrator/PlayRecordJson.cs
delete mode 100644 LocalSaveModScoreMigrator/Program.cs
delete mode 100644 LocalSaveModScoreMigrator/ScoreRankConverter.cs
create mode 100644 TaikoLocalServer/Conventions/ControllerHidingConvention.cs
create mode 100644 TaikoLocalServer/Mappers/UserSettingMapper.cs
diff --git a/Application/Application.csproj b/Application/Application.csproj
new file mode 100644
index 0000000..da45ae4
--- /dev/null
+++ b/Application/Application.csproj
@@ -0,0 +1,14 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
+
diff --git a/Domain/Common/Constants.cs b/Domain/Common/Constants.cs
new file mode 100644
index 0000000..360ef6c
--- /dev/null
+++ b/Domain/Common/Constants.cs
@@ -0,0 +1,32 @@
+namespace Domain.Common;
+
+public static class Constants
+{
+ public const string DateTimeFormat = "yyyyMMddHHmmss";
+
+ public const int MusicIdMax = 1600;
+
+ public const int MusicIdMaxExpanded = 9000;
+
+ public const string DefaultDbName = "taiko.db3";
+
+ public const string MusicInfoBaseName = "musicinfo";
+ public const string WordlistBaseName = "wordlist";
+ public const string MusicOrderBaseName = "music_order";
+ public const string DonCosRewardBaseName = "don_cos_reward";
+ public const string ShougouBaseName = "shougou";
+ public const string NeiroBaseName = "neiro";
+
+ // Verup1
+ public const uint ShopVerupMasterType = 104;
+
+ // Verup2
+ public const uint DanVerupMasterType = 101;
+ public const uint GaidenVerupMasterType = 102;
+ public const uint FolderVerupMasterType = 103;
+ public const uint IntroVerupMasterType = 105;
+
+ public const uint FunctionIdDaniFolderAvailable = 1;
+ public const uint FunctionIdDaniAvailable = 2;
+ public const uint FunctionIdAiBattleAvailable = 3;
+}
\ No newline at end of file
diff --git a/Domain/Domain.csproj b/Domain/Domain.csproj
new file mode 100644
index 0000000..3a63532
--- /dev/null
+++ b/Domain/Domain.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/Domain/Entities/AiScoreDatum.cs b/Domain/Entities/AiScoreDatum.cs
new file mode 100644
index 0000000..0eb39c4
--- /dev/null
+++ b/Domain/Entities/AiScoreDatum.cs
@@ -0,0 +1,18 @@
+using Domain.Enums;
+
+namespace Domain.Entities;
+
+public class AiScoreDatum
+{
+ public uint Baid { get; set; }
+
+ public uint SongId { get; set; }
+
+ public Difficulty Difficulty { get; set; }
+
+ public bool IsWin { get; set; }
+
+ public List AiSectionScoreData { get; set; } = [];
+
+ public virtual UserDatum? Ba { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Entities/AiSectionScoreDatum.cs b/Domain/Entities/AiSectionScoreDatum.cs
new file mode 100644
index 0000000..e67107c
--- /dev/null
+++ b/Domain/Entities/AiSectionScoreDatum.cs
@@ -0,0 +1,30 @@
+using Domain.Enums;
+
+namespace Domain.Entities;
+
+public class AiSectionScoreDatum
+{
+ public uint Baid { get; set; }
+
+ public uint SongId { get; set; }
+
+ public Difficulty Difficulty { get; set; }
+
+ public int SectionIndex { get; set; }
+
+ public CrownType Crown { get; set; }
+
+ public bool IsWin { get; set; }
+
+ public uint Score { get; set; }
+
+ public uint GoodCount { get; set; }
+
+ public uint OkCount { get; set; }
+
+ public uint MissCount { get; set; }
+
+ public uint DrumrollCount { get; set; }
+
+ public AiScoreDatum Parent { get; set; } = null!;
+}
\ No newline at end of file
diff --git a/Domain/Entities/Card.cs b/Domain/Entities/Card.cs
new file mode 100644
index 0000000..3ac0a2a
--- /dev/null
+++ b/Domain/Entities/Card.cs
@@ -0,0 +1,10 @@
+namespace Domain.Entities
+{
+ public partial class Card
+ {
+ public string AccessCode { get; set; } = null!;
+ public uint Baid { get; set; }
+
+ public virtual UserDatum? Ba { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Domain/Entities/Credential.cs b/Domain/Entities/Credential.cs
new file mode 100644
index 0000000..8b62df6
--- /dev/null
+++ b/Domain/Entities/Credential.cs
@@ -0,0 +1,11 @@
+namespace Domain.Entities
+{
+ public partial class Credential
+ {
+ public uint Baid { get; set; }
+ public string Password { get; set; } = null!;
+ public string Salt { get; set; } = null!;
+
+ public virtual UserDatum? Ba { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Domain/Entities/DanScoreDatum.cs b/Domain/Entities/DanScoreDatum.cs
new file mode 100644
index 0000000..ebad2e5
--- /dev/null
+++ b/Domain/Entities/DanScoreDatum.cs
@@ -0,0 +1,17 @@
+using Domain.Enums;
+
+namespace Domain.Entities;
+
+public class DanScoreDatum
+{
+ public uint Baid { get; set; }
+ public uint DanId { get; set; }
+ public DanType DanType { get; set; }
+ public uint ArrivalSongCount { get; set; }
+ public uint SoulGaugeTotal { get; set; }
+ public uint ComboCountTotal { get; set; }
+ public DanClearState ClearState { get; set; }
+ public List DanStageScoreData { get; set; } = [];
+
+ public virtual UserDatum? Ba { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Entities/DanStageScoreDatum.cs b/Domain/Entities/DanStageScoreDatum.cs
new file mode 100644
index 0000000..4574b85
--- /dev/null
+++ b/Domain/Entities/DanStageScoreDatum.cs
@@ -0,0 +1,32 @@
+using Domain.Enums;
+
+namespace Domain.Entities;
+
+public class DanStageScoreDatum
+{
+ public uint Baid { get; set; }
+
+ public uint DanId { get; set; }
+
+ public DanType DanType { get; set; }
+
+ public uint SongNumber { get; set; }
+
+ public uint PlayScore { get; set; }
+
+ public uint GoodCount { get; set; }
+
+ public uint OkCount { get; set; }
+
+ public uint BadCount { get; set; }
+
+ public uint DrumrollCount { get; set; }
+
+ public uint TotalHitCount { get; set; }
+
+ public uint ComboCount { get; set; }
+
+ public uint HighScore { get; set; }
+
+ public DanScoreDatum Parent { get; set; } = null!;
+}
\ No newline at end of file
diff --git a/Domain/Entities/SongBestDatum.cs b/Domain/Entities/SongBestDatum.cs
new file mode 100644
index 0000000..231a0f1
--- /dev/null
+++ b/Domain/Entities/SongBestDatum.cs
@@ -0,0 +1,16 @@
+using Domain.Enums;
+
+namespace Domain.Entities
+{
+ public partial class SongBestDatum
+ {
+ public uint Baid { get; set; }
+ public uint SongId { get; set; }
+ public Difficulty Difficulty { get; set; }
+ public uint BestScore { get; set; }
+ public uint BestRate { get; set; }
+ public CrownType BestCrown { get; set; }
+ public ScoreRank BestScoreRank { get; set; }
+ public virtual UserDatum? Ba { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Domain/Entities/SongBestDatumMethods.cs b/Domain/Entities/SongBestDatumMethods.cs
new file mode 100644
index 0000000..163c10d
--- /dev/null
+++ b/Domain/Entities/SongBestDatumMethods.cs
@@ -0,0 +1,29 @@
+using Domain.Enums;
+
+namespace Domain.Entities;
+
+public partial class SongBestDatum
+{
+ public void UpdateBestData(CrownType crown, uint scoreRank, uint playScore, uint scoreRate)
+ {
+ if (BestCrown < crown)
+ {
+ BestCrown = crown;
+ }
+
+ if ((uint)BestScoreRank < scoreRank)
+ {
+ BestScoreRank = (ScoreRank)scoreRank;
+ }
+
+ if (BestScore < playScore)
+ {
+ BestScore = playScore;
+ }
+
+ if (BestRate < scoreRate)
+ {
+ BestRate = scoreRate;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Domain/Entities/SongPlayDatum.cs b/Domain/Entities/SongPlayDatum.cs
new file mode 100644
index 0000000..22c1df1
--- /dev/null
+++ b/Domain/Entities/SongPlayDatum.cs
@@ -0,0 +1,28 @@
+using Domain.Enums;
+
+namespace Domain.Entities;
+
+public partial class SongPlayDatum
+{
+ public long Id { get; set; }
+ public uint Baid { get; set; }
+
+ public uint SongNumber { get; set; }
+
+ public uint SongId { get; set; }
+ public Difficulty Difficulty { get; set; }
+ public CrownType Crown { get; set; }
+ public uint Score { get; set; }
+ public uint ScoreRate { get; set; }
+ public ScoreRank ScoreRank { get; set; }
+ public uint GoodCount { get; set; }
+ public uint OkCount { get; set; }
+ public uint MissCount { get; set; }
+ public uint ComboCount { get; set; }
+ public uint HitCount { get; set; }
+ public uint DrumrollCount { get; set; }
+ public bool Skipped { get; set; }
+ public DateTime PlayTime { get; set; }
+
+ public virtual UserDatum? Ba { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Entities/Token.cs b/Domain/Entities/Token.cs
new file mode 100644
index 0000000..10c6736
--- /dev/null
+++ b/Domain/Entities/Token.cs
@@ -0,0 +1,12 @@
+namespace Domain.Entities;
+
+public class Token
+{
+ public uint Baid { get; set; }
+
+ public int Id { get; set; }
+
+ public int Count { get; set; }
+
+ public virtual UserDatum? Datum { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Entities/UserDatum.cs b/Domain/Entities/UserDatum.cs
new file mode 100644
index 0000000..53fe4e0
--- /dev/null
+++ b/Domain/Entities/UserDatum.cs
@@ -0,0 +1,53 @@
+using Domain.Enums;
+
+namespace Domain.Entities
+{
+ public partial class UserDatum
+ {
+ public uint Baid { get; set; }
+ public string MyDonName { get; set; } = string.Empty;
+ public uint MyDonNameLanguage { get; set; }
+ public string Title { get; set; } = string.Empty;
+ public uint TitlePlateId { get; set; }
+ public List FavoriteSongsArray { get; set; } = [];
+ public List ToneFlgArray { get; set; } = [0];
+ public List TitleFlgArray { get; set; } = [];
+ public List UnlockedKigurumi { get; set; } = [0];
+ public List UnlockedHead { get; set; } = [0];
+ public List UnlockedBody { get; set; } = [0];
+ public List UnlockedFace { get; set; } = [0];
+ public List UnlockedPuchi { get; set; } = [0];
+ public uint[] GenericInfoFlgArray { get; set; } = [];
+ public short OptionSetting { get; set; }
+ public int NotesPosition { get; set; }
+ public bool IsVoiceOn { get; set; } = true;
+ public bool IsSkipOn { get; set; }
+ public uint DifficultyPlayedCourse { get; set; }
+ public uint DifficultyPlayedStar { get; set; }
+ public uint DifficultyPlayedSort { get; set; }
+ public uint DifficultySettingCourse { get; set; }
+ public uint DifficultySettingStar { get; set; }
+ public uint DifficultySettingSort { get; set; }
+ public uint SelectedToneId { get; set; }
+ public DateTime LastPlayDatetime { get; set; }
+ public uint LastPlayMode { get; set; }
+ public uint ColorBody { get; set; }
+ public uint ColorFace { get; set; }
+ public uint ColorLimb { get; set; }
+ public uint CurrentKigurumi { get; set; }
+ public uint CurrentHead { get; set; }
+ public uint CurrentBody { get; set; }
+ public uint CurrentFace { get; set; }
+ public uint CurrentPuchi { get; set; }
+ public bool DisplayDan { get; set; }
+ public bool DisplayAchievement { get; set; }
+ public Difficulty AchievementDisplayDifficulty { get; set; }
+ public int AiWinCount { get; set; }
+ public List Tokens { get; set; } = [];
+ public List UnlockedSongIdList { get; set; } = [];
+ public List UnlockedUraSongIdList { get; set; } = [];
+ public bool IsAdmin { get; set; }
+
+ public virtual List Cards { get; set; } = [];
+ }
+}
\ No newline at end of file
diff --git a/Domain/Enums/CrownType.cs b/Domain/Enums/CrownType.cs
new file mode 100644
index 0000000..d290cd1
--- /dev/null
+++ b/Domain/Enums/CrownType.cs
@@ -0,0 +1,9 @@
+namespace Domain.Enums;
+
+public enum CrownType
+{
+ None = 0,
+ Clear = 1,
+ Gold = 2,
+ Dondaful = 3
+}
\ No newline at end of file
diff --git a/Domain/Enums/DanBorderType.cs b/Domain/Enums/DanBorderType.cs
new file mode 100644
index 0000000..1160bf1
--- /dev/null
+++ b/Domain/Enums/DanBorderType.cs
@@ -0,0 +1,7 @@
+namespace Domain.Enums;
+
+public enum DanBorderType
+{
+ All = 1,
+ PerSong = 2
+}
\ No newline at end of file
diff --git a/Domain/Enums/DanClearState.cs b/Domain/Enums/DanClearState.cs
new file mode 100644
index 0000000..f57fea2
--- /dev/null
+++ b/Domain/Enums/DanClearState.cs
@@ -0,0 +1,12 @@
+namespace Domain.Enums;
+
+public enum DanClearState
+{
+ NotClear = 0,
+ RedNormalClear,
+ RedFullComboClear,
+ RedPerfectClear,
+ GoldNormalClear,
+ GoldFullComboClear,
+ GoldPerfectClear,
+}
\ No newline at end of file
diff --git a/Domain/Enums/DanConditionType.cs b/Domain/Enums/DanConditionType.cs
new file mode 100644
index 0000000..deaf2f8
--- /dev/null
+++ b/Domain/Enums/DanConditionType.cs
@@ -0,0 +1,13 @@
+namespace Domain.Enums;
+
+public enum DanConditionType
+{
+ SoulGauge = 1,
+ GoodCount = 2,
+ OkCount = 3,
+ BadCount = 4,
+ ComboCount = 5,
+ DrumrollCount = 6,
+ Score = 7,
+ TotalHitCount = 8
+}
\ No newline at end of file
diff --git a/Domain/Enums/DanType.cs b/Domain/Enums/DanType.cs
new file mode 100644
index 0000000..acc7bf6
--- /dev/null
+++ b/Domain/Enums/DanType.cs
@@ -0,0 +1,7 @@
+namespace Domain.Enums;
+
+public enum DanType
+{
+ Normal = 1,
+ Gaiden = 2
+}
\ No newline at end of file
diff --git a/Domain/Enums/Difficulty.cs b/Domain/Enums/Difficulty.cs
new file mode 100644
index 0000000..33cc7b4
--- /dev/null
+++ b/Domain/Enums/Difficulty.cs
@@ -0,0 +1,12 @@
+namespace Domain.Enums;
+
+public enum Difficulty : uint
+{
+ None = 0,
+ Easy = 1,
+ Normal = 2,
+ Hard = 3,
+ Oni = 4,
+ UraOni = 5
+}
+
diff --git a/Domain/Enums/NameLanguage.cs b/Domain/Enums/NameLanguage.cs
new file mode 100644
index 0000000..3c3a398
--- /dev/null
+++ b/Domain/Enums/NameLanguage.cs
@@ -0,0 +1,10 @@
+namespace Domain.Enums;
+
+public enum NameLanguage : uint
+{
+ Japanese = 0,
+ English = 1,
+ Korean = 2,
+ ChineseTraditional = 3,
+ ChineseSimplified = 4,
+}
\ No newline at end of file
diff --git a/Domain/Enums/PlayMode.cs b/Domain/Enums/PlayMode.cs
new file mode 100644
index 0000000..45bc9d1
--- /dev/null
+++ b/Domain/Enums/PlayMode.cs
@@ -0,0 +1,9 @@
+namespace Domain.Enums;
+
+public enum PlayMode
+{
+ Normal = 0,
+ DanMode = 1,
+ GaidenMode = 4,
+ AiBattle = 6
+}
\ No newline at end of file
diff --git a/Domain/Enums/RandomType.cs b/Domain/Enums/RandomType.cs
new file mode 100644
index 0000000..982e0f6
--- /dev/null
+++ b/Domain/Enums/RandomType.cs
@@ -0,0 +1,9 @@
+// ReSharper disable UnusedMember.Global
+namespace Domain.Enums;
+
+public enum RandomType
+{
+ None = 0,
+ Whimsical = 1,
+ Messy = 2
+}
\ No newline at end of file
diff --git a/Domain/Enums/ScoreRank.cs b/Domain/Enums/ScoreRank.cs
new file mode 100644
index 0000000..143affc
--- /dev/null
+++ b/Domain/Enums/ScoreRank.cs
@@ -0,0 +1,13 @@
+namespace Domain.Enums;
+
+public enum ScoreRank
+{
+ None = 1,
+ White,
+ Bronze,
+ Silver,
+ Gold,
+ Sakura,
+ Purple,
+ Dondaful
+}
\ No newline at end of file
diff --git a/Domain/Enums/SongGenre.cs b/Domain/Enums/SongGenre.cs
new file mode 100644
index 0000000..aec05a2
--- /dev/null
+++ b/Domain/Enums/SongGenre.cs
@@ -0,0 +1,13 @@
+namespace Domain.Enums;
+
+public enum SongGenre
+{
+ Pop = 0,
+ Anime = 1,
+ Kids = 2,
+ Vocaloid = 3,
+ GameMusic = 4,
+ NamcoOriginal = 5,
+ Variety = 6,
+ Classical = 7
+}
\ No newline at end of file
diff --git a/Domain/Models/AiSectionBestData.cs b/Domain/Models/AiSectionBestData.cs
new file mode 100644
index 0000000..8cdd16f
--- /dev/null
+++ b/Domain/Models/AiSectionBestData.cs
@@ -0,0 +1,22 @@
+using Domain.Enums;
+
+namespace Domain.Models;
+
+public class AiSectionBestData
+{
+ public int SectionIndex { get; set; }
+
+ public CrownType Crown { get; set; }
+
+ public bool IsWin { get; set; }
+
+ public uint Score { get; set; }
+
+ public uint GoodCount { get; set; }
+
+ public uint OkCount { get; set; }
+
+ public uint MissCount { get; set; }
+
+ public uint DrumrollCount { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Models/Costume.cs b/Domain/Models/Costume.cs
new file mode 100644
index 0000000..0744b13
--- /dev/null
+++ b/Domain/Models/Costume.cs
@@ -0,0 +1,13 @@
+namespace Domain.Models;
+
+public class Costume
+{
+ public uint CostumeId { get; set; }
+
+ public string CostumeType { get; init; } = string.Empty;
+
+ public string CostumeName { get; init; } = string.Empty;
+ public string CostumeNameEN { get; init; } = string.Empty;
+ public string CostumeNameCN { get; init; } = string.Empty;
+ public string CostumeNameKO { get; init; } = string.Empty;
+}
\ No newline at end of file
diff --git a/Domain/Models/DanBestData.cs b/Domain/Models/DanBestData.cs
new file mode 100644
index 0000000..b191887
--- /dev/null
+++ b/Domain/Models/DanBestData.cs
@@ -0,0 +1,16 @@
+using Domain.Enums;
+
+namespace Domain.Models;
+
+public class DanBestData
+{
+ public uint DanId { get; set; }
+
+ public DanClearState ClearState { get; set; }
+
+ public uint SoulGaugeTotal { get; set; }
+
+ public uint ComboCountTotal { get; set; }
+
+ public List DanBestStageDataList { get; set; } = new();
+}
\ No newline at end of file
diff --git a/Domain/Models/DanBestStageData.cs b/Domain/Models/DanBestStageData.cs
new file mode 100644
index 0000000..be41510
--- /dev/null
+++ b/Domain/Models/DanBestStageData.cs
@@ -0,0 +1,22 @@
+namespace Domain.Models;
+
+public class DanBestStageData
+{
+ public uint SongNumber { get; set; }
+
+ public uint PlayScore { get; set; }
+
+ public uint GoodCount { get; set; }
+
+ public uint OkCount { get; set; }
+
+ public uint BadCount { get; set; }
+
+ public uint DrumrollCount { get; set; }
+
+ public uint TotalHitCount { get; set; }
+
+ public uint ComboCount { get; set; }
+
+ public uint HighScore { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Models/DanData.cs b/Domain/Models/DanData.cs
new file mode 100644
index 0000000..32651ec
--- /dev/null
+++ b/Domain/Models/DanData.cs
@@ -0,0 +1,66 @@
+using System.Text.Json.Serialization;
+
+namespace Domain.Models;
+
+public class DanData : IVerupNo
+{
+ [JsonPropertyName("danId")]
+ public uint DanId { get; set; }
+
+ [JsonPropertyName("title")]
+ public string Title { get; set; } = string.Empty;
+
+ [JsonPropertyName("verupNo")]
+ public uint VerupNo { get; set; }
+
+ [JsonPropertyName("aryOdaiSong")]
+ public List OdaiSongList { get; set; } = new();
+
+ [JsonPropertyName("aryOdaiBorder")]
+ public List OdaiBorderList { get; set; } = new();
+
+ public class OdaiSong
+ {
+ [JsonPropertyName("songNo")]
+ public uint SongNo { get; set; }
+
+ [JsonPropertyName("level")]
+ public uint Level { get; set; }
+
+ [JsonPropertyName("isHiddenSongName")]
+ public bool IsHiddenSongName { get; set; }
+ }
+
+ public class OdaiBorder
+ {
+ [JsonPropertyName("odaiType")]
+ public uint OdaiType { get; set; }
+
+ [JsonPropertyName("borderType")]
+ public uint BorderType { get; set; }
+
+ [JsonPropertyName("redBorderTotal")]
+ public uint RedBorderTotal { get; set; }
+
+ [JsonPropertyName("goldBorderTotal")]
+ public uint GoldBorderTotal { get; set; }
+
+ [JsonPropertyName("redBorder_1")]
+ public uint RedBorder1 { get; set; }
+
+ [JsonPropertyName("redBorder_2")]
+ public uint RedBorder2 { get; set; }
+
+ [JsonPropertyName("redBorder_3")]
+ public uint RedBorder3 { get; set; }
+
+ [JsonPropertyName("goldBorder_1")]
+ public uint GoldBorder1 { get; set; }
+
+ [JsonPropertyName("goldBorder_2")]
+ public uint GoldBorder2 { get; set; }
+
+ [JsonPropertyName("goldBorder_3")]
+ public uint GoldBorder3 { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Domain/Models/EventFolderData.cs b/Domain/Models/EventFolderData.cs
new file mode 100644
index 0000000..2ba7cdc
--- /dev/null
+++ b/Domain/Models/EventFolderData.cs
@@ -0,0 +1,21 @@
+using System.Text.Json.Serialization;
+
+namespace Domain.Models;
+
+public class EventFolderData : IVerupNo
+{
+ [JsonPropertyName("folderId")]
+ public uint FolderId { get; set; }
+
+ [JsonPropertyName("verupNo")]
+ public uint VerupNo { get; set; }
+
+ [JsonPropertyName("priority")]
+ public uint Priority { get; set; }
+
+ [JsonPropertyName("songNo")]
+ public uint[]? SongNoes { get; set; }
+
+ [JsonPropertyName("parentFolderId")]
+ public uint ParentFolderId { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Models/IVerupNo.cs b/Domain/Models/IVerupNo.cs
new file mode 100644
index 0000000..6d63ff1
--- /dev/null
+++ b/Domain/Models/IVerupNo.cs
@@ -0,0 +1,6 @@
+namespace Domain.Models;
+
+public interface IVerupNo
+{
+ public uint VerupNo { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Models/MovieData.cs b/Domain/Models/MovieData.cs
new file mode 100644
index 0000000..688fd61
--- /dev/null
+++ b/Domain/Models/MovieData.cs
@@ -0,0 +1,12 @@
+using System.Text.Json.Serialization;
+
+namespace Domain.Models;
+
+public class MovieData
+{
+ [JsonPropertyName("movie_id")]
+ public uint MovieId { get; set; }
+
+ [JsonPropertyName("enable_days")]
+ public uint EnableDays { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Models/MusicDetail.cs b/Domain/Models/MusicDetail.cs
new file mode 100644
index 0000000..932a776
--- /dev/null
+++ b/Domain/Models/MusicDetail.cs
@@ -0,0 +1,28 @@
+using Domain.Enums;
+
+namespace Domain.Models;
+
+public class MusicDetail
+{
+ public uint SongId { get; set; }
+ public int Index { get; set; }
+
+ public string SongName { get; set; } = string.Empty;
+ public string SongNameEN { get; set; } = string.Empty;
+ public string SongNameCN { get; set; } = string.Empty;
+ public string SongNameKO { get; set; } = string.Empty;
+
+ public string ArtistName { get; set; } = string.Empty;
+ public string ArtistNameEN { get; set; } = string.Empty;
+ public string ArtistNameCN { get; set; } = string.Empty;
+ public string ArtistNameKO { get; set; } = string.Empty;
+
+ public SongGenre Genre { get; set; }
+ public int StarEasy { get; set; }
+ public int StarNormal { get; set; }
+ public int StarHard { get; set; }
+ public int StarOni { get; set; }
+ public int StarUra { get; set; }
+
+ public bool IsFavorite { get; set; } = false;
+}
\ No newline at end of file
diff --git a/Domain/Models/PlaySetting.cs b/Domain/Models/PlaySetting.cs
new file mode 100644
index 0000000..37d3fd4
--- /dev/null
+++ b/Domain/Models/PlaySetting.cs
@@ -0,0 +1,14 @@
+using Domain.Enums;
+
+namespace Domain.Models;
+
+public class PlaySetting
+{
+ public uint Speed { get; set; }
+
+ public bool IsVanishOn { get; set; }
+
+ public bool IsInverseOn { get; set; }
+
+ public RandomType RandomType { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Models/QRCodeData.cs b/Domain/Models/QRCodeData.cs
new file mode 100644
index 0000000..b46fce3
--- /dev/null
+++ b/Domain/Models/QRCodeData.cs
@@ -0,0 +1,10 @@
+using System.Text.Json.Serialization;
+
+namespace Domain.Models;
+
+public class QRCodeData
+{
+ [JsonPropertyName("serial")] public string Serial { get; set; } = null!;
+
+ [JsonPropertyName("id")] public uint Id { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Models/ShopFolderData.cs b/Domain/Models/ShopFolderData.cs
new file mode 100644
index 0000000..3b12247
--- /dev/null
+++ b/Domain/Models/ShopFolderData.cs
@@ -0,0 +1,12 @@
+using System.Text.Json.Serialization;
+
+namespace Domain.Models;
+
+public class ShopFolderData
+{
+ [JsonPropertyName("songNo")] public uint SongNo { get; set; }
+
+ [JsonPropertyName("type")] public uint Type { get; set; }
+
+ [JsonPropertyName("price")] public uint Price { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Models/SongBestData.cs b/Domain/Models/SongBestData.cs
new file mode 100644
index 0000000..99952e8
--- /dev/null
+++ b/Domain/Models/SongBestData.cs
@@ -0,0 +1,52 @@
+using Domain.Enums;
+
+namespace Domain.Models;
+
+public class SongBestData
+{
+ public uint SongId { get; set; }
+
+ public SongGenre Genre { get; set; }
+
+ public string MusicName { get; set; } = string.Empty;
+
+ public string MusicArtist { get; set; } = string.Empty;
+
+ public Difficulty Difficulty { get; set; }
+
+ public int PlayCount { get; set; }
+ public int ClearCount { get; set; }
+ public int FullComboCount { get; set; }
+ public int PerfectCount { get; set; }
+
+ public uint BestScore { get; set; }
+
+ public uint BestRate { get; set; }
+
+ public CrownType BestCrown { get; set; }
+
+ public ScoreRank BestScoreRank { get; set; }
+
+ public DateTime LastPlayTime { get; set; }
+
+ public DateTime PlayTime { get; set; }
+
+ public bool IsFavorite { get; set; }
+
+ public uint GoodCount { get; set; }
+
+ public uint OkCount { get; set; }
+
+ public uint MissCount { get; set; }
+
+ public uint ComboCount { get; set; }
+
+ public uint HitCount { get; set; }
+
+ public uint DrumrollCount { get; set; }
+
+ public List AiSectionBestData { get; set; } = new();
+
+ public bool ShowAiData { get; set; }
+ public List RecentPlayData { get; set; } = new();
+}
\ No newline at end of file
diff --git a/Domain/Models/SongHistoryData.cs b/Domain/Models/SongHistoryData.cs
new file mode 100644
index 0000000..e98c5c8
--- /dev/null
+++ b/Domain/Models/SongHistoryData.cs
@@ -0,0 +1,48 @@
+using Domain.Enums;
+
+namespace Domain.Models;
+
+public class SongHistoryData
+{
+ public uint SongId { get; set; }
+
+ public SongGenre Genre { get; set; }
+
+ public string MusicName { get; set; } = string.Empty;
+
+ public string MusicArtist { get; set; } = string.Empty;
+
+ public Difficulty Difficulty { get; set; }
+
+ public int Stars { get; set; }
+
+ public bool ShowDetails { get; set; }
+
+ public uint Score { get; set; }
+
+ public CrownType Crown { get; set; }
+
+ public ScoreRank ScoreRank { get; set; }
+
+ public DateTime PlayTime { get; set; }
+
+ public bool IsFavorite { get; set; }
+
+ public uint GoodCount { get; set; }
+
+ public uint OkCount { get; set; }
+
+ public uint MissCount { get; set; }
+
+ public uint ComboCount { get; set; }
+
+ public uint HitCount { get; set; }
+
+ public uint DrumrollCount { get; set; }
+
+ public uint SongNumber { get; set; }
+
+ //public List AiSectionBestData { get; set; } = new();
+
+ //public bool ShowAiData { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Models/SongIntroductionData.cs b/Domain/Models/SongIntroductionData.cs
new file mode 100644
index 0000000..6cc10cc
--- /dev/null
+++ b/Domain/Models/SongIntroductionData.cs
@@ -0,0 +1,18 @@
+using System.Text.Json.Serialization;
+
+namespace Domain.Models;
+
+public class SongIntroductionData : IVerupNo
+{
+ [JsonPropertyName("setId")]
+ public uint SetId { get; set; }
+
+ [JsonPropertyName("verupNo")]
+ public uint VerupNo { get; set; }
+
+ [JsonPropertyName("mainSongNo")]
+ public uint MainSongNo { get; set; }
+
+ [JsonPropertyName("subSongNo")]
+ public uint[]? SubSongNoes { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Models/SongLeaderboard.cs b/Domain/Models/SongLeaderboard.cs
new file mode 100644
index 0000000..1df16b5
--- /dev/null
+++ b/Domain/Models/SongLeaderboard.cs
@@ -0,0 +1,27 @@
+using Domain.Enums;
+
+namespace Domain.Models;
+
+public class SongLeaderboard
+{
+ public int Rank { get; set; }
+
+ public uint Baid { get; set; }
+
+ public uint BestScore { get; set; }
+
+ public uint BestRate { get; set; }
+
+ public CrownType BestCrown { get; set; }
+
+ public ScoreRank BestScoreRank { get; set; }
+
+ public uint GoodCount { get; set; }
+ public uint OkCount { get; set; }
+ public uint MissCount { get; set; }
+ public uint ComboCount { get; set; }
+ public uint HitCount { get; set; }
+ public uint DrumrollCount { get; set; }
+
+ public string? UserName { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Models/SongPlayDatumDto.cs b/Domain/Models/SongPlayDatumDto.cs
new file mode 100644
index 0000000..3a795d7
--- /dev/null
+++ b/Domain/Models/SongPlayDatumDto.cs
@@ -0,0 +1,23 @@
+using Domain.Enums;
+
+namespace Domain.Models
+{
+ public class SongPlayDatumDto
+ {
+ public uint SongNumber { get; set; }
+ public uint SongId { get; set; }
+ public Difficulty Difficulty { get; set; }
+ public CrownType Crown { get; set; }
+ public uint Score { get; set; }
+ public uint ScoreRate { get; set; }
+ public ScoreRank ScoreRank { get; set; }
+ public uint GoodCount { get; set; }
+ public uint OkCount { get; set; }
+ public uint MissCount { get; set; }
+ public uint ComboCount { get; set; }
+ public uint HitCount { get; set; }
+ public uint DrumrollCount { get; set; }
+ public bool Skipped { get; set; }
+ public DateTime PlayTime { get; set; }
+ }
+}
diff --git a/Domain/Models/Title.cs b/Domain/Models/Title.cs
new file mode 100644
index 0000000..9ef2f14
--- /dev/null
+++ b/Domain/Models/Title.cs
@@ -0,0 +1,25 @@
+namespace Domain.Models;
+
+public class Title
+{
+ public uint TitleId { get; set; }
+
+ public string TitleName { get; init; } = string.Empty;
+
+ public uint TitleRarity { get; init; }
+
+ public override bool Equals(object? obj)
+ {
+ if (obj is Title title)
+ {
+ return title.TitleName.Equals(TitleName);
+ }
+
+ return false;
+ }
+
+ public override int GetHashCode()
+ {
+ return TitleName.GetHashCode();
+ }
+}
\ No newline at end of file
diff --git a/Domain/Models/User.cs b/Domain/Models/User.cs
new file mode 100644
index 0000000..bee00c3
--- /dev/null
+++ b/Domain/Models/User.cs
@@ -0,0 +1,12 @@
+namespace Domain.Models;
+
+public class User
+{
+ public uint Baid { get; set; }
+
+ public List AccessCodes { get; set; } = new();
+
+ public bool IsAdmin { get; set; }
+
+ public UserSetting UserSetting { get; set; } = new();
+}
\ No newline at end of file
diff --git a/Domain/Models/UserCredential.cs b/Domain/Models/UserCredential.cs
new file mode 100644
index 0000000..f001b30
--- /dev/null
+++ b/Domain/Models/UserCredential.cs
@@ -0,0 +1,10 @@
+namespace Domain.Models;
+
+public class UserCredential
+{
+ public uint Baid { get; set; }
+
+ public string Password { get; set; } = string.Empty;
+
+ public string Salt { get; set; } = string.Empty;
+}
\ No newline at end of file
diff --git a/Domain/Models/UserSetting.cs b/Domain/Models/UserSetting.cs
new file mode 100644
index 0000000..3a33b44
--- /dev/null
+++ b/Domain/Models/UserSetting.cs
@@ -0,0 +1,68 @@
+using Domain.Enums;
+
+namespace Domain.Models;
+
+public class UserSetting
+{
+ public uint Baid { get; set; }
+
+ public uint SelectedToneId { get; set; }
+
+ public bool DisplayAchievement { get; set; }
+
+ public bool DisplayDan { get; set; }
+
+ public uint DifficultySettingCourse { get; set; }
+
+ public uint DifficultySettingStar { get; set; }
+
+ public uint DifficultySettingSort { get; set; }
+
+ public bool IsVoiceOn { get; set; }
+
+ public bool IsSkipOn { get; set; }
+
+ public Difficulty AchievementDisplayDifficulty { get; set; }
+
+ public PlaySetting PlaySetting { get; set; } = new();
+
+ public int NotesPosition { get; set; }
+
+ public string MyDonName { get; set; } = string.Empty;
+
+ public uint MyDonNameLanguage { get; set; }
+
+ public string Title { get; set; } = string.Empty;
+
+ public uint TitlePlateId { get; set; }
+
+ public uint CurrentKigurumi { get; set; }
+
+ public uint CurrentHead { get; set; }
+
+ public uint CurrentBody { get; set; }
+
+ public uint CurrentFace { get; set; }
+
+ public uint CurrentPuchi { get; set; }
+
+ public List UnlockedKigurumi { get; set; } = new();
+
+ public List UnlockedHead { get; set; } = new();
+
+ public List UnlockedBody { get; set; } = new();
+
+ public List UnlockedFace { get; set; } = new();
+
+ public List UnlockedPuchi { get; set; } = new();
+
+ public List UnlockedTitle { get; set; } = new();
+
+ public uint ColorFace { get; set; }
+
+ public uint ColorBody { get; set; }
+
+ public uint ColorLimb { get; set; }
+
+ public DateTime LastPlayDateTime { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Settings/AuthSettings.cs b/Domain/Settings/AuthSettings.cs
new file mode 100644
index 0000000..9ab692e
--- /dev/null
+++ b/Domain/Settings/AuthSettings.cs
@@ -0,0 +1,12 @@
+namespace Domain.Settings;
+
+public class AuthSettings
+{
+ public string JwtKey { get; set; } = string.Empty;
+
+ public string JwtIssuer { get; set; } = string.Empty;
+
+ public string JwtAudience { get; set; } = string.Empty;
+
+ public bool AuthenticationRequired { get; set; }
+}
\ No newline at end of file
diff --git a/Domain/Settings/DataSettings.cs b/Domain/Settings/DataSettings.cs
new file mode 100644
index 0000000..9480f73
--- /dev/null
+++ b/Domain/Settings/DataSettings.cs
@@ -0,0 +1,26 @@
+namespace Domain.Settings;
+
+public class DataSettings
+{
+ public string DanDataFileName { get; set; } = "dan_data.json";
+
+ public string GaidenDataFileName { get; set; } = "gaiden_data.json";
+
+ public string EventFolderDataFileName { get; set; } = "event_folder_data.json";
+
+ public string IntroDataFileName { get; set; } = "intro_data.json";
+
+ public string MovieDataFileName { get; set; } = "movie_data.json";
+
+ public string ShopFolderDataFileName { get; set; } = "shop_folder_data.json";
+
+ public string TokenDataFileName { get; set; } = "token_data.json";
+
+ public string LockedSongsDataFileName { get; set; } = "locked_songs_data.json";
+
+ public string QrCodeDataFileName { get; set; } = "qrcode_data.json";
+
+ public string LockedCostumeDataFileName { get; set; } = "locked_costume_data.json";
+
+ public string LockedTitleDataFileName { get; set; } = "locked_title_data.json";
+}
\ No newline at end of file
diff --git a/Domain/Settings/ServerSettings.cs b/Domain/Settings/ServerSettings.cs
new file mode 100644
index 0000000..8946fbc
--- /dev/null
+++ b/Domain/Settings/ServerSettings.cs
@@ -0,0 +1,14 @@
+using Domain.Common;
+
+namespace Domain.Settings;
+
+public class ServerSettings
+{
+ public string MuchaUrl { get; set; } = string.Empty;
+
+ public string GameUrl { get; set; } = string.Empty;
+
+ public bool EnableMoreSongs { get; set; }
+
+ public int MoreSongsSize { get; set; } = Constants.MusicIdMaxExpanded;
+}
\ No newline at end of file
diff --git a/GameDatabase/Context/TaikoDbContext.cs b/GameDatabase/Context/TaikoDbContext.cs
index 7e95b79..16cb340 100644
--- a/GameDatabase/Context/TaikoDbContext.cs
+++ b/GameDatabase/Context/TaikoDbContext.cs
@@ -124,6 +124,9 @@ namespace GameDatabase.Context
entity.Property(e => e.AchievementDisplayDifficulty)
.HasConversion();
+ entity.HasMany(e => e.Cards)
+ .WithOne(e => e.Ba)
+ .HasForeignKey(e => e.Baid);
});
OnModelCreatingPartial(modelBuilder);
diff --git a/GameDatabase/Entities/UserDatum.cs b/GameDatabase/Entities/UserDatum.cs
index 2ead41f..aacea05 100644
--- a/GameDatabase/Entities/UserDatum.cs
+++ b/GameDatabase/Entities/UserDatum.cs
@@ -47,5 +47,7 @@ namespace GameDatabase.Entities
public List UnlockedSongIdList { get; set; } = [];
public List UnlockedUraSongIdList { get; set; } = [];
public bool IsAdmin { get; set; }
+
+ public virtual List Cards { get; set; } = [];
}
}
\ No newline at end of file
diff --git a/GameDatabase/GameDatabase.csproj b/GameDatabase/GameDatabase.csproj
index 7a130cc..52f9385 100644
--- a/GameDatabase/GameDatabase.csproj
+++ b/GameDatabase/GameDatabase.csproj
@@ -13,13 +13,15 @@
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
\ No newline at end of file
diff --git a/LocalSaveModScoreMigrator/LocalSaveModScoreMigrator.csproj b/Infrastructure/Infrastructure.csproj
similarity index 52%
rename from LocalSaveModScoreMigrator/LocalSaveModScoreMigrator.csproj
rename to Infrastructure/Infrastructure.csproj
index 6b4cbcf..b048d59 100644
--- a/LocalSaveModScoreMigrator/LocalSaveModScoreMigrator.csproj
+++ b/Infrastructure/Infrastructure.csproj
@@ -1,28 +1,25 @@
-
+
- Exe
net8.0
enable
enable
- 1.0.0-beta1
- 11
-
-
-
-
+
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
-
+
diff --git a/Infrastructure/Migrations/20220825070549_Initial.Designer.cs b/Infrastructure/Migrations/20220825070549_Initial.Designer.cs
new file mode 100644
index 0000000..0aff673
--- /dev/null
+++ b/Infrastructure/Migrations/20220825070549_Initial.Designer.cs
@@ -0,0 +1,222 @@
+//
+using System;
+using Infrastructure.Persistence;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace TaikoLocalServer.Migrations
+{
+ [DbContext(typeof(TaikoDbContext))]
+ [Migration("20220825070549_Initial")]
+ partial class Initial
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder.HasAnnotation("ProductVersion", "7.0.0-preview.7.22376.2");
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.Card", b =>
+ {
+ b.Property("AccessCode")
+ .HasColumnType("TEXT");
+
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("AccessCode");
+
+ b.HasIndex(new[] { "Baid" }, "IX_Card_Baid")
+ .IsUnique();
+
+ b.ToTable("Card", (string)null);
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.SongBestDatum", b =>
+ {
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.Property("SongId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Difficulty")
+ .HasColumnType("INTEGER");
+
+ b.Property("BestCrown")
+ .HasColumnType("INTEGER");
+
+ b.Property("BestRate")
+ .HasColumnType("INTEGER");
+
+ b.Property("BestScore")
+ .HasColumnType("INTEGER");
+
+ b.Property("BestScoreRank")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Baid", "SongId", "Difficulty");
+
+ b.ToTable("SongBestData");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.SongPlayDatum", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.Property("ComboCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("Crown")
+ .HasColumnType("INTEGER");
+
+ b.Property("Difficulty")
+ .HasColumnType("INTEGER");
+
+ b.Property("GoodCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("HitCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("MissCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("OkCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("PlayTime")
+ .HasColumnType("datetime");
+
+ b.Property("Score")
+ .HasColumnType("INTEGER");
+
+ b.Property("ScoreRank")
+ .HasColumnType("INTEGER");
+
+ b.Property("ScoreRate")
+ .HasColumnType("INTEGER");
+
+ b.Property("Skipped")
+ .HasColumnType("INTEGER");
+
+ b.Property("SongId")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Baid");
+
+ b.ToTable("SongPlayData");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.UserDatum", b =>
+ {
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.Property("AchievementDisplayDifficulty")
+ .HasColumnType("INTEGER");
+
+ b.Property("ColorBody")
+ .HasColumnType("INTEGER");
+
+ b.Property("ColorFace")
+ .HasColumnType("INTEGER");
+
+ b.Property("ColorLimb")
+ .HasColumnType("INTEGER");
+
+ b.Property("CostumeData")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("DisplayAchievement")
+ .HasColumnType("INTEGER");
+
+ b.Property("DisplayDan")
+ .HasColumnType("INTEGER");
+
+ b.Property("FavoriteSongsArray")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("IsSkipOn")
+ .HasColumnType("INTEGER");
+
+ b.Property("IsVoiceOn")
+ .HasColumnType("INTEGER");
+
+ b.Property("LastPlayDatetime")
+ .HasColumnType("datetime");
+
+ b.Property("LastPlayMode")
+ .HasColumnType("INTEGER");
+
+ b.Property("MyDonName")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("OptionSetting")
+ .HasColumnType("INTEGER");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("TitlePlateId")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Baid");
+
+ b.ToTable("UserData");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.SongBestDatum", b =>
+ {
+ b.HasOne("TaikoLocalServer.Entities.Card", "Ba")
+ .WithMany()
+ .HasForeignKey("Baid")
+ .HasPrincipalKey("Baid")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Ba");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.SongPlayDatum", b =>
+ {
+ b.HasOne("TaikoLocalServer.Entities.Card", "Ba")
+ .WithMany()
+ .HasForeignKey("Baid")
+ .HasPrincipalKey("Baid")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Ba");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.UserDatum", b =>
+ {
+ b.HasOne("TaikoLocalServer.Entities.Card", "Ba")
+ .WithMany()
+ .HasForeignKey("Baid")
+ .HasPrincipalKey("Baid")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Ba");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/Infrastructure/Migrations/20220825070549_Initial.cs b/Infrastructure/Migrations/20220825070549_Initial.cs
new file mode 100644
index 0000000..f9f5701
--- /dev/null
+++ b/Infrastructure/Migrations/20220825070549_Initial.cs
@@ -0,0 +1,143 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace TaikoLocalServer.Migrations
+{
+ ///
+ public partial class Initial : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "Card",
+ columns: table => new
+ {
+ AccessCode = table.Column(type: "TEXT", nullable: false),
+ Baid = table.Column(type: "INTEGER", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Card", x => x.AccessCode);
+ table.UniqueConstraint("AK_Card_Baid", x => x.Baid);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "SongBestData",
+ columns: table => new
+ {
+ Baid = table.Column(type: "INTEGER", nullable: false),
+ SongId = table.Column(type: "INTEGER", nullable: false),
+ Difficulty = table.Column(type: "INTEGER", nullable: false),
+ BestScore = table.Column(type: "INTEGER", nullable: false),
+ BestRate = table.Column(type: "INTEGER", nullable: false),
+ BestCrown = table.Column(type: "INTEGER", nullable: false),
+ BestScoreRank = table.Column(type: "INTEGER", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_SongBestData", x => new { x.Baid, x.SongId, x.Difficulty });
+ table.ForeignKey(
+ name: "FK_SongBestData_Card_Baid",
+ column: x => x.Baid,
+ principalTable: "Card",
+ principalColumn: "Baid",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "SongPlayData",
+ columns: table => new
+ {
+ Id = table.Column(type: "INTEGER", nullable: false)
+ .Annotation("Sqlite:Autoincrement", true),
+ Baid = table.Column(type: "INTEGER", nullable: false),
+ SongId = table.Column(type: "INTEGER", nullable: false),
+ Difficulty = table.Column(type: "INTEGER", nullable: false),
+ Crown = table.Column(type: "INTEGER", nullable: false),
+ Score = table.Column(type: "INTEGER", nullable: false),
+ ScoreRate = table.Column(type: "INTEGER", nullable: false),
+ ScoreRank = table.Column(type: "INTEGER", nullable: false),
+ GoodCount = table.Column(type: "INTEGER", nullable: false),
+ OkCount = table.Column(type: "INTEGER", nullable: false),
+ MissCount = table.Column(type: "INTEGER", nullable: false),
+ ComboCount = table.Column(type: "INTEGER", nullable: false),
+ HitCount = table.Column(type: "INTEGER", nullable: false),
+ Skipped = table.Column(type: "INTEGER", nullable: false),
+ PlayTime = table.Column(type: "datetime", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_SongPlayData", x => x.Id);
+ table.ForeignKey(
+ name: "FK_SongPlayData_Card_Baid",
+ column: x => x.Baid,
+ principalTable: "Card",
+ principalColumn: "Baid",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "UserData",
+ columns: table => new
+ {
+ Baid = table.Column(type: "INTEGER", nullable: false),
+ MyDonName = table.Column(type: "TEXT", nullable: false),
+ Title = table.Column(type: "TEXT", nullable: false),
+ TitlePlateId = table.Column(type: "INTEGER", nullable: false),
+ FavoriteSongsArray = table.Column(type: "TEXT", nullable: false),
+ OptionSetting = table.Column(type: "INTEGER", nullable: false),
+ IsVoiceOn = table.Column(type: "INTEGER", nullable: false),
+ IsSkipOn = table.Column(type: "INTEGER", nullable: false),
+ LastPlayDatetime = table.Column(type: "datetime", nullable: false),
+ LastPlayMode = table.Column(type: "INTEGER", nullable: false),
+ ColorBody = table.Column(type: "INTEGER", nullable: false),
+ ColorFace = table.Column(type: "INTEGER", nullable: false),
+ ColorLimb = table.Column(type: "INTEGER", nullable: false),
+ CostumeData = table.Column(type: "TEXT", nullable: false),
+ DisplayDan = table.Column(type: "INTEGER", nullable: false),
+ DisplayAchievement = table.Column(type: "INTEGER", nullable: false),
+ AchievementDisplayDifficulty = table.Column(type: "INTEGER", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_UserData", x => x.Baid);
+ table.ForeignKey(
+ name: "FK_UserData_Card_Baid",
+ column: x => x.Baid,
+ principalTable: "Card",
+ principalColumn: "Baid",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Card_Baid",
+ table: "Card",
+ column: "Baid",
+ unique: true);
+
+ migrationBuilder.CreateIndex(
+ name: "IX_SongPlayData_Baid",
+ table: "SongPlayData",
+ column: "Baid");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "SongBestData");
+
+ migrationBuilder.DropTable(
+ name: "SongPlayData");
+
+ migrationBuilder.DropTable(
+ name: "UserData");
+
+ migrationBuilder.DropTable(
+ name: "Card");
+ }
+ }
+}
diff --git a/Infrastructure/Migrations/20220827163841_FirstMigration.Designer.cs b/Infrastructure/Migrations/20220827163841_FirstMigration.Designer.cs
new file mode 100644
index 0000000..948f34d
--- /dev/null
+++ b/Infrastructure/Migrations/20220827163841_FirstMigration.Designer.cs
@@ -0,0 +1,225 @@
+//
+using System;
+using Infrastructure.Persistence;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace TaikoLocalServer.Migrations
+{
+ [DbContext(typeof(TaikoDbContext))]
+ [Migration("20220827163841_FirstMigration")]
+ partial class FirstMigration
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder.HasAnnotation("ProductVersion", "7.0.0-preview.7.22376.2");
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.Card", b =>
+ {
+ b.Property("AccessCode")
+ .HasColumnType("TEXT");
+
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("AccessCode");
+
+ b.HasIndex(new[] { "Baid" }, "IX_Card_Baid")
+ .IsUnique();
+
+ b.ToTable("Card", (string)null);
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.SongBestDatum", b =>
+ {
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.Property("SongId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Difficulty")
+ .HasColumnType("INTEGER");
+
+ b.Property("BestCrown")
+ .HasColumnType("INTEGER");
+
+ b.Property("BestRate")
+ .HasColumnType("INTEGER");
+
+ b.Property("BestScore")
+ .HasColumnType("INTEGER");
+
+ b.Property("BestScoreRank")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Baid", "SongId", "Difficulty");
+
+ b.ToTable("SongBestData");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.SongPlayDatum", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.Property("ComboCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("Crown")
+ .HasColumnType("INTEGER");
+
+ b.Property("Difficulty")
+ .HasColumnType("INTEGER");
+
+ b.Property("GoodCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("HitCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("MissCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("OkCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("PlayTime")
+ .HasColumnType("datetime");
+
+ b.Property("Score")
+ .HasColumnType("INTEGER");
+
+ b.Property("ScoreRank")
+ .HasColumnType("INTEGER");
+
+ b.Property("ScoreRate")
+ .HasColumnType("INTEGER");
+
+ b.Property("Skipped")
+ .HasColumnType("INTEGER");
+
+ b.Property("SongId")
+ .HasColumnType("INTEGER");
+
+ b.Property("SongNumber")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Baid");
+
+ b.ToTable("SongPlayData");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.UserDatum", b =>
+ {
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.Property("AchievementDisplayDifficulty")
+ .HasColumnType("INTEGER");
+
+ b.Property("ColorBody")
+ .HasColumnType("INTEGER");
+
+ b.Property("ColorFace")
+ .HasColumnType("INTEGER");
+
+ b.Property("ColorLimb")
+ .HasColumnType("INTEGER");
+
+ b.Property("CostumeData")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("DisplayAchievement")
+ .HasColumnType("INTEGER");
+
+ b.Property("DisplayDan")
+ .HasColumnType("INTEGER");
+
+ b.Property("FavoriteSongsArray")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("IsSkipOn")
+ .HasColumnType("INTEGER");
+
+ b.Property("IsVoiceOn")
+ .HasColumnType("INTEGER");
+
+ b.Property("LastPlayDatetime")
+ .HasColumnType("datetime");
+
+ b.Property("LastPlayMode")
+ .HasColumnType("INTEGER");
+
+ b.Property("MyDonName")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("OptionSetting")
+ .HasColumnType("INTEGER");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("TitlePlateId")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Baid");
+
+ b.ToTable("UserData");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.SongBestDatum", b =>
+ {
+ b.HasOne("TaikoLocalServer.Entities.Card", "Ba")
+ .WithMany()
+ .HasForeignKey("Baid")
+ .HasPrincipalKey("Baid")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Ba");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.SongPlayDatum", b =>
+ {
+ b.HasOne("TaikoLocalServer.Entities.Card", "Ba")
+ .WithMany()
+ .HasForeignKey("Baid")
+ .HasPrincipalKey("Baid")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Ba");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.UserDatum", b =>
+ {
+ b.HasOne("TaikoLocalServer.Entities.Card", "Ba")
+ .WithMany()
+ .HasForeignKey("Baid")
+ .HasPrincipalKey("Baid")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Ba");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/Infrastructure/Migrations/20220827163841_FirstMigration.cs b/Infrastructure/Migrations/20220827163841_FirstMigration.cs
new file mode 100644
index 0000000..43b4874
--- /dev/null
+++ b/Infrastructure/Migrations/20220827163841_FirstMigration.cs
@@ -0,0 +1,29 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace TaikoLocalServer.Migrations
+{
+ ///
+ public partial class FirstMigration : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.AddColumn(
+ name: "SongNumber",
+ table: "SongPlayData",
+ type: "INTEGER",
+ nullable: false,
+ defaultValue: 0u);
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropColumn(
+ name: "SongNumber",
+ table: "SongPlayData");
+ }
+ }
+}
diff --git a/Infrastructure/Migrations/20220828101620_AddDanDbTest.Designer.cs b/Infrastructure/Migrations/20220828101620_AddDanDbTest.Designer.cs
new file mode 100644
index 0000000..9b1a413
--- /dev/null
+++ b/Infrastructure/Migrations/20220828101620_AddDanDbTest.Designer.cs
@@ -0,0 +1,322 @@
+//
+using System;
+using Infrastructure.Persistence;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace TaikoLocalServer.Migrations
+{
+ [DbContext(typeof(TaikoDbContext))]
+ [Migration("20220828101620_AddDanDbTest")]
+ partial class AddDanDbTest
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder.HasAnnotation("ProductVersion", "7.0.0-preview.7.22376.2");
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.Card", b =>
+ {
+ b.Property("AccessCode")
+ .HasColumnType("TEXT");
+
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("AccessCode");
+
+ b.HasIndex(new[] { "Baid" }, "IX_Card_Baid")
+ .IsUnique();
+
+ b.ToTable("Card", (string)null);
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.DanScoreDatum", b =>
+ {
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.Property("DanId")
+ .HasColumnType("INTEGER");
+
+ b.Property("ArrivalSongCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("ComboCountTotal")
+ .HasColumnType("INTEGER");
+
+ b.Property("SoulGaugeTotal")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Baid", "DanId");
+
+ b.ToTable("DanScoreData");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.DanStageScoreDatum", b =>
+ {
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.Property("DanId")
+ .HasColumnType("INTEGER");
+
+ b.Property("SongNumber")
+ .HasColumnType("INTEGER");
+
+ b.Property("BadCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("ComboCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("DrumrollCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("GoodCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("HighScore")
+ .HasColumnType("INTEGER");
+
+ b.Property("OkCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("PlayScore")
+ .HasColumnType("INTEGER");
+
+ b.Property("TotalHitCount")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Baid", "DanId", "SongNumber");
+
+ b.ToTable("DanStageScoreData");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.SongBestDatum", b =>
+ {
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.Property("SongId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Difficulty")
+ .HasColumnType("INTEGER");
+
+ b.Property("BestCrown")
+ .HasColumnType("INTEGER");
+
+ b.Property("BestRate")
+ .HasColumnType("INTEGER");
+
+ b.Property("BestScore")
+ .HasColumnType("INTEGER");
+
+ b.Property("BestScoreRank")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Baid", "SongId", "Difficulty");
+
+ b.ToTable("SongBestData");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.SongPlayDatum", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.Property("ComboCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("Crown")
+ .HasColumnType("INTEGER");
+
+ b.Property("Difficulty")
+ .HasColumnType("INTEGER");
+
+ b.Property("GoodCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("HitCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("MissCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("OkCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("PlayTime")
+ .HasColumnType("datetime");
+
+ b.Property("Score")
+ .HasColumnType("INTEGER");
+
+ b.Property("ScoreRank")
+ .HasColumnType("INTEGER");
+
+ b.Property("ScoreRate")
+ .HasColumnType("INTEGER");
+
+ b.Property("Skipped")
+ .HasColumnType("INTEGER");
+
+ b.Property("SongId")
+ .HasColumnType("INTEGER");
+
+ b.Property("SongNumber")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Baid");
+
+ b.ToTable("SongPlayData");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.UserDatum", b =>
+ {
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.Property("AchievementDisplayDifficulty")
+ .HasColumnType("INTEGER");
+
+ b.Property("ColorBody")
+ .HasColumnType("INTEGER");
+
+ b.Property("ColorFace")
+ .HasColumnType("INTEGER");
+
+ b.Property("ColorLimb")
+ .HasColumnType("INTEGER");
+
+ b.Property("CostumeData")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("DisplayAchievement")
+ .HasColumnType("INTEGER");
+
+ b.Property("DisplayDan")
+ .HasColumnType("INTEGER");
+
+ b.Property("FavoriteSongsArray")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("IsSkipOn")
+ .HasColumnType("INTEGER");
+
+ b.Property("IsVoiceOn")
+ .HasColumnType("INTEGER");
+
+ b.Property("LastPlayDatetime")
+ .HasColumnType("datetime");
+
+ b.Property("LastPlayMode")
+ .HasColumnType("INTEGER");
+
+ b.Property("MyDonName")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("OptionSetting")
+ .HasColumnType("INTEGER");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("TitlePlateId")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Baid");
+
+ b.ToTable("UserData");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.DanScoreDatum", b =>
+ {
+ b.HasOne("TaikoLocalServer.Entities.Card", "Ba")
+ .WithMany()
+ .HasForeignKey("Baid")
+ .HasPrincipalKey("Baid")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Ba");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.DanStageScoreDatum", b =>
+ {
+ b.HasOne("TaikoLocalServer.Entities.DanScoreDatum", "Parent")
+ .WithMany()
+ .HasForeignKey("Baid")
+ .HasPrincipalKey("Baid")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("TaikoLocalServer.Entities.DanScoreDatum", null)
+ .WithMany("DanStageScoreData")
+ .HasForeignKey("Baid", "DanId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Parent");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.SongBestDatum", b =>
+ {
+ b.HasOne("TaikoLocalServer.Entities.Card", "Ba")
+ .WithMany()
+ .HasForeignKey("Baid")
+ .HasPrincipalKey("Baid")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Ba");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.SongPlayDatum", b =>
+ {
+ b.HasOne("TaikoLocalServer.Entities.Card", "Ba")
+ .WithMany()
+ .HasForeignKey("Baid")
+ .HasPrincipalKey("Baid")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Ba");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.UserDatum", b =>
+ {
+ b.HasOne("TaikoLocalServer.Entities.Card", "Ba")
+ .WithMany()
+ .HasForeignKey("Baid")
+ .HasPrincipalKey("Baid")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Ba");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.DanScoreDatum", b =>
+ {
+ b.Navigation("DanStageScoreData");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/Infrastructure/Migrations/20220828101620_AddDanDbTest.cs b/Infrastructure/Migrations/20220828101620_AddDanDbTest.cs
new file mode 100644
index 0000000..82efbd7
--- /dev/null
+++ b/Infrastructure/Migrations/20220828101620_AddDanDbTest.cs
@@ -0,0 +1,79 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace TaikoLocalServer.Migrations
+{
+ ///
+ public partial class AddDanDbTest : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "DanScoreData",
+ columns: table => new
+ {
+ Baid = table.Column(type: "INTEGER", nullable: false),
+ DanId = table.Column(type: "INTEGER", nullable: false),
+ ArrivalSongCount = table.Column(type: "INTEGER", nullable: false),
+ SoulGaugeTotal = table.Column(type: "INTEGER", nullable: false),
+ ComboCountTotal = table.Column(type: "INTEGER", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_DanScoreData", x => new { x.Baid, x.DanId });
+ table.UniqueConstraint("AK_DanScoreData_Baid", x => x.Baid);
+ table.ForeignKey(
+ name: "FK_DanScoreData_Card_Baid",
+ column: x => x.Baid,
+ principalTable: "Card",
+ principalColumn: "Baid",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "DanStageScoreData",
+ columns: table => new
+ {
+ Baid = table.Column(type: "INTEGER", nullable: false),
+ DanId = table.Column(type: "INTEGER", nullable: false),
+ SongNumber = table.Column(type: "INTEGER", nullable: false),
+ PlayScore = table.Column(type: "INTEGER", nullable: false),
+ GoodCount = table.Column(type: "INTEGER", nullable: false),
+ OkCount = table.Column(type: "INTEGER", nullable: false),
+ BadCount = table.Column(type: "INTEGER", nullable: false),
+ DrumrollCount = table.Column(type: "INTEGER", nullable: false),
+ TotalHitCount = table.Column(type: "INTEGER", nullable: false),
+ ComboCount = table.Column(type: "INTEGER", nullable: false),
+ HighScore = table.Column(type: "INTEGER", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_DanStageScoreData", x => new { x.Baid, x.DanId, x.SongNumber });
+ table.ForeignKey(
+ name: "FK_DanStageScoreData_DanScoreData_Baid",
+ column: x => x.Baid,
+ principalTable: "DanScoreData",
+ principalColumn: "Baid",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_DanStageScoreData_DanScoreData_Baid_DanId",
+ columns: x => new { x.Baid, x.DanId },
+ principalTable: "DanScoreData",
+ principalColumns: new[] { "Baid", "DanId" },
+ onDelete: ReferentialAction.Cascade);
+ });
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "DanStageScoreData");
+
+ migrationBuilder.DropTable(
+ name: "DanScoreData");
+ }
+ }
+}
diff --git a/Infrastructure/Migrations/20220828171353_AddClearState.Designer.cs b/Infrastructure/Migrations/20220828171353_AddClearState.Designer.cs
new file mode 100644
index 0000000..8201f4e
--- /dev/null
+++ b/Infrastructure/Migrations/20220828171353_AddClearState.Designer.cs
@@ -0,0 +1,327 @@
+//
+using System;
+using Infrastructure.Persistence;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace TaikoLocalServer.Migrations
+{
+ [DbContext(typeof(TaikoDbContext))]
+ [Migration("20220828171353_AddClearState")]
+ partial class AddClearState
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder.HasAnnotation("ProductVersion", "7.0.0-preview.7.22376.2");
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.Card", b =>
+ {
+ b.Property("AccessCode")
+ .HasColumnType("TEXT");
+
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("AccessCode");
+
+ b.HasIndex(new[] { "Baid" }, "IX_Card_Baid")
+ .IsUnique();
+
+ b.ToTable("Card", (string)null);
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.DanScoreDatum", b =>
+ {
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.Property("DanId")
+ .HasColumnType("INTEGER");
+
+ b.Property("ArrivalSongCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("ClearState")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER")
+ .HasDefaultValue(0u);
+
+ b.Property("ComboCountTotal")
+ .HasColumnType("INTEGER");
+
+ b.Property("SoulGaugeTotal")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Baid", "DanId");
+
+ b.ToTable("DanScoreData");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.DanStageScoreDatum", b =>
+ {
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.Property("DanId")
+ .HasColumnType("INTEGER");
+
+ b.Property("SongNumber")
+ .HasColumnType("INTEGER");
+
+ b.Property("BadCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("ComboCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("DrumrollCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("GoodCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("HighScore")
+ .HasColumnType("INTEGER");
+
+ b.Property("OkCount")
+ .HasColumnType("INTEGER");
+
+ b.Property("PlayScore")
+ .HasColumnType("INTEGER");
+
+ b.Property("TotalHitCount")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Baid", "DanId", "SongNumber");
+
+ b.ToTable("DanStageScoreData");
+ });
+
+ modelBuilder.Entity("TaikoLocalServer.Entities.SongBestDatum", b =>
+ {
+ b.Property("Baid")
+ .HasColumnType("INTEGER");
+
+ b.Property("SongId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Difficulty")
+ .HasColumnType("INTEGER");
+
+ b.Property("BestCrown")
+ .HasColumnType("INTEGER");
+
+ b.Property