[F] Ongeki: Fix unique constraints

pull/134/head
Azalea 2025-03-27 00:37:27 -04:00
parent e00bbeadde
commit e65269ad29
3 changed files with 156 additions and 7 deletions

View File

@ -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 {

View File

@ -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);