From e65269ad29fd3754daad04669ce6f786a5067c3f Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Thu, 27 Mar 2025 00:37:27 -0400 Subject: [PATCH] [F] Ongeki: Fix unique constraints --- .../aqua/sega/ongeki/OngekiUpsertAllApi.kt | 18 ++- .../{40 => 80}/V1000_42__ongeki_refresh.sql | 0 .../db/80/V1000_43__ongeki_unique.sql | 145 ++++++++++++++++++ 3 files changed, 156 insertions(+), 7 deletions(-) rename src/main/resources/db/{40 => 80}/V1000_42__ongeki_refresh.sql (100%) create mode 100644 src/main/resources/db/80/V1000_43__ongeki_unique.sql diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiUpsertAllApi.kt b/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiUpsertAllApi.kt index 19b4b130..4e3d1c62 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiUpsertAllApi.kt +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiUpsertAllApi.kt @@ -37,7 +37,11 @@ fun OngekiController.initUpsertAll() { all.run { // Set users listOfNotNull( - userOption, userPlaylogList, userActivityList, userMusicDetailList, userCharacterList + userOption, userPlaylogList, userActivityList, userMusicDetailList, userCharacterList, userCardList, + userDeckList, userTrainingRoomList, userStoryList, userChapterList, userMemoryChapterList, userItemList, + userMusicItemList, userLoginBonusList, userEventPointList, userMissionPointList, userBossList, + userTechCountList, userScenarioList, userTradeItemList, userEventMusicList, userTechEventList, userKopList, + userEventMap?.let { listOf(it) } ).flatten().forEach { it.user = u } // UserOption @@ -55,11 +59,6 @@ fun OngekiController.initUpsertAll() { // UserSessionlogList, UserJewelboostlogLost doesn't need to be saved for a private server - // UserActivityList - userActivityList?.let { list -> - db.activity.saveAll(list.distinctBy { it.activityId to it.kind }.mapApply { - id = db.activity.findByUserAndKindAndActivityId(u, kind, activityId)()?.id ?: 0 }) } - // Ratings mapOf( "recent_rating_list" to userRecentRatingList, // This thing still need to save to solve the rating drop @@ -80,6 +79,11 @@ fun OngekiController.initUpsertAll() { "new_rating_base_next_pscore" to userNewRatingBaseNextPScoreList ).forEach { (k, v) -> v?.let { saveGeneralData(it, u, k) } } + // UserActivityList + userActivityList?.let { list -> + db.activity.saveAll(list.distinctBy { it.activityId to it.kind }.mapApply { + id = db.activity.findByUserAndKindAndActivityId(u, kind, activityId)()?.id ?: 0 }) } + // UserMusicDetailList userMusicDetailList?.let { list -> db.musicDetail.saveAll(list.distinctBy { it.musicId to it.level }.mapApply { @@ -171,7 +175,7 @@ fun OngekiController.initUpsertAll() { userEventMusicList?.let { list -> db.eventMusic.saveAll(list.distinctBy { it.eventId to it.type to it.musicId }.mapApply { id = db.eventMusic.findByUserAndEventIdAndTypeAndMusicId(u, eventId, type, musicId)()?.id ?: 0 }) } - + // UserTechEventList userTechEventList?.let { list -> db.techEvent.saveAll(list.distinctBy { it.eventId }.mapApply { diff --git a/src/main/resources/db/40/V1000_42__ongeki_refresh.sql b/src/main/resources/db/80/V1000_42__ongeki_refresh.sql similarity index 100% rename from src/main/resources/db/40/V1000_42__ongeki_refresh.sql rename to src/main/resources/db/80/V1000_42__ongeki_refresh.sql diff --git a/src/main/resources/db/80/V1000_43__ongeki_unique.sql b/src/main/resources/db/80/V1000_43__ongeki_unique.sql new file mode 100644 index 00000000..9b7bb66b --- /dev/null +++ b/src/main/resources/db/80/V1000_43__ongeki_unique.sql @@ -0,0 +1,145 @@ +# Delete duplicate rows + +-- UserMusicDetailList +DELETE FROM ongeki_user_music_detail +WHERE id NOT IN ( + SELECT MAX(id) + FROM ongeki_user_music_detail + GROUP BY user_id, music_id, level +); + +-- UserCharacterList +DELETE FROM ongeki_user_character +WHERE id NOT IN ( + SELECT MAX(id) + FROM ongeki_user_character + GROUP BY user_id, character_id +); + +-- UserCardList +DELETE FROM ongeki_user_card +WHERE id NOT IN ( + SELECT MAX(id) + FROM ongeki_user_card + GROUP BY user_id, card_id +); + +-- UserDeckList +DELETE FROM ongeki_user_deck +WHERE id NOT IN ( + SELECT MAX(id) + FROM ongeki_user_deck + GROUP BY user_id, deck_id +); + +-- UserTrainingRoomList +DELETE FROM ongeki_user_training_room +WHERE id NOT IN ( + SELECT MAX(id) + FROM ongeki_user_training_room + GROUP BY user_id, room_id +); + +-- UserChapterList +DELETE FROM ongeki_user_chapter +WHERE id NOT IN ( + SELECT MAX(id) + FROM ongeki_user_chapter + GROUP BY user_id, chapter_id +); + +-- UserMemoryChapterList +DELETE FROM ongeki_user_memory_chapter +WHERE id NOT IN ( + SELECT MAX(id) + FROM ongeki_user_memory_chapter + GROUP BY user_id, chapter_id +); + +-- UserItemList +DELETE FROM ongeki_user_item +WHERE id NOT IN ( + SELECT MAX(id) + FROM ongeki_user_item + GROUP BY user_id, item_kind, item_id +); + +-- UserMusicItemList +DELETE FROM ongeki_user_music_item +WHERE id NOT IN ( + SELECT MAX(id) + FROM ongeki_user_music_item + GROUP BY user_id, music_id +); + +-- UserLoginBonusList +DELETE FROM ongeki_user_login_bonus +WHERE id NOT IN ( + SELECT MAX(id) + FROM ongeki_user_login_bonus + GROUP BY user_id, bonus_id +); + +-- UserEventPointList +DELETE FROM ongeki_user_event_point +WHERE id NOT IN ( + SELECT MAX(id) + FROM ongeki_user_event_point + GROUP BY user_id, event_id +); + +-- UserMissionPointList +DELETE FROM ongeki_user_mission_point +WHERE id NOT IN ( + SELECT MAX(id) + FROM ongeki_user_mission_point + GROUP BY user_id, event_id +); + +-- UserMusicDetailList +ALTER TABLE ongeki_user_music_detail + ADD UNIQUE KEY uniq_user_music_level (user_id, music_id, level); + +-- UserCharacterList +ALTER TABLE ongeki_user_character + ADD UNIQUE KEY uniq_user_character (user_id, character_id); + +-- UserCardList +ALTER TABLE ongeki_user_card + ADD UNIQUE KEY uniq_user_card (user_id, card_id); + +-- UserDeckList +ALTER TABLE ongeki_user_deck + ADD UNIQUE KEY uniq_user_deck (user_id, deck_id); + +-- UserTrainingRoomList +ALTER TABLE ongeki_user_training_room + ADD UNIQUE KEY uniq_user_room (user_id, room_id); + +-- UserChapterList +ALTER TABLE ongeki_user_chapter + ADD UNIQUE KEY uniq_user_chapter (user_id, chapter_id); + +-- UserMemoryChapterList +ALTER TABLE ongeki_user_memory_chapter + ADD UNIQUE KEY uniq_user_mem_chapter (user_id, chapter_id); + +-- UserItemList +ALTER TABLE ongeki_user_item + ADD UNIQUE KEY uniq_user_item (user_id, item_kind, item_id); + +-- UserMusicItemList +ALTER TABLE ongeki_user_music_item + ADD UNIQUE KEY uniq_user_music_item (user_id, music_id); + +-- UserLoginBonusList +ALTER TABLE ongeki_user_login_bonus + ADD UNIQUE KEY uniq_user_login_bonus (user_id, bonus_id); + +-- UserEventPointList +ALTER TABLE ongeki_user_event_point + ADD UNIQUE KEY uniq_user_event_point (user_id, event_id); + +-- UserMissionPointList +ALTER TABLE ongeki_user_mission_point + ADD UNIQUE KEY uniq_user_mission_point (user_id, event_id);