From 11dbe849cf1d9c1b2da1f472de7fa1a5c1c71805 Mon Sep 17 00:00:00 2001 From: Menci Date: Wed, 25 Jun 2025 17:59:17 +0800 Subject: [PATCH] add mai2 fields --- .../aqua/net/games/ImportController.kt | 17 +++--- .../samnyan/aqua/net/games/mai2/Mai2Import.kt | 55 +++++++++---------- 2 files changed, 35 insertions(+), 37 deletions(-) diff --git a/src/main/java/icu/samnyan/aqua/net/games/ImportController.kt b/src/main/java/icu/samnyan/aqua/net/games/ImportController.kt index 27a452be..69d9b8e2 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/ImportController.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/ImportController.kt @@ -84,13 +84,11 @@ abstract class ImportController, UserModel: gameId = game userData = userDataRepo.findByCard(u.ghostCard) ?: (404 - "User not found") exportRepos.forEach { (f, u) -> - val customExporter = customExporters[f] - if (customExporter != null) { - customExporter(userData, options)?.let { f.set(this, it) } - } else { - if (f returns List::class) f.set(this, u.findByUser(userData)) - else u.findSingleByUser(userData)()?.let { f.set(this, it) } - } + if (f returns List::class) f.set(this, u.findByUser(userData)) + else u.findSingleByUser(userData)()?.let { f.set(this, it) } + } + customExporters.forEach { (f, exporter) -> + exporter(userData, options)?.let { f.set(this, it) } } } @@ -106,8 +104,9 @@ abstract class ImportController, UserModel: val export = json.parseJackson(exportClass.java) if (!export.gameId.equals(game, true)) 400 - "Invalid game ID" - val lists = listRepos.toList().filter { (f, _) -> f !in customImporters }.associate { (f, r) -> r to f.get(export) as List> }.vNotNull() - val singles = singleRepos.toList().filter { (f, _) -> f !in customImporters }.associate { (f, r) -> r to f.get(export) as IUserEntity }.vNotNull() + val lists = listRepos.toList().associate { (f, r) -> r to f.get(export) as List> }.vNotNull() + val singles = singleRepos.toList().associate { (f, r) -> r to f.get(export) as IUserEntity }.vNotNull() + var repoFieldMap = exportRepos.toList().associate { (f, r) -> r to f } // Validate new user data // Check that all ids are 0 (this should be true since all ids are @JsonIgnore) diff --git a/src/main/java/icu/samnyan/aqua/net/games/mai2/Mai2Import.kt b/src/main/java/icu/samnyan/aqua/net/games/mai2/Mai2Import.kt index 03da745c..06f310d8 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/mai2/Mai2Import.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/mai2/Mai2Import.kt @@ -24,7 +24,7 @@ class Mai2Import( it.name.replace("List", "").lowercase() }, exportRepos = Maimai2DataExport::class.vars() - .filter { f -> f.name !in setOf("gameId", "userData") } + .filter { f -> f.name !in setOf("gameId", "userData", "userPlaylogList", "userFavoriteMusicList") } .associateWith { field -> val repoName = when (field.name) { "userKaleidxScopeList" -> "userKaleidx" @@ -70,14 +70,18 @@ class Mai2Import( } ) as Map, (Mai2UserDetail, ExportOptions) -> Any?>, customImporters = mapOf( + Maimai2DataExport::userPlaylogList to { export: Maimai2DataExport, user: Mai2UserDetail -> + repos.userPlaylog.saveAll(export.userPlaylogList.map { it.apply { it.user = user } }) + }, Maimai2DataExport::userFavoriteMusicList to { export: Maimai2DataExport, user: Mai2UserDetail -> val favoriteMusicList = export.userFavoriteMusicList if (favoriteMusicList.isNotEmpty()) { val key = "favorite_music" + // This field always imports as incremental, since the userGeneralData field (for backwards compatibility) is processed before this val data = repos.userGeneralData.findByUserAndPropertyKey(user, key).orElse(null) ?: Mai2UserGeneralData().apply { this.user = user; propertyKey = key } repos.userGeneralData.save(data.apply { - propertyValue = favoriteMusicList.map { it.id }.joinToString(",") + propertyValue = favoriteMusicList.sortedBy { it.orderId }.map { it.id }.joinToString(",") }) } } @@ -88,30 +92,25 @@ class Mai2Import( } data class Maimai2DataExport( - override var userData: Mai2UserDetail, - var userExtend: Mai2UserExtend, - var userOption: Mai2UserOption, - var userUdemae: Mai2UserUdemae, - var mapEncountNpcList: List, - var userActList: List, - var userCharacterList: List, - var userChargeList: List, - var userCourseList: List, - var userFavoriteList: List, - var userFriendSeasonRankingList: List, - var userGeneralDataList: List, - var userItemList: List, - var userLoginBonusList: List, - var userMapList: List, - var userMusicDetailList: List, - var userIntimateList: List, - var userFavoriteMusicList: List, - var userKaleidxScopeList: List, - var userPlaylogList: List, + override var userData: Mai2UserDetail = Mai2UserDetail(), + var userExtend: Mai2UserExtend = Mai2UserExtend(), + var userOption: Mai2UserOption = Mai2UserOption(), + var userUdemae: Mai2UserUdemae = Mai2UserUdemae(), + var mapEncountNpcList: List = mutableListOf(), + var userActList: List = mutableListOf(), + var userCharacterList: List = mutableListOf(), + var userChargeList: List = mutableListOf(), + var userCourseList: List = mutableListOf(), + var userFavoriteList: List = mutableListOf(), + var userFriendSeasonRankingList: List = mutableListOf(), + var userGeneralDataList: List = mutableListOf(), + var userItemList: List = mutableListOf(), + var userLoginBonusList: List = mutableListOf(), + var userMapList: List = mutableListOf(), + var userMusicDetailList: List = mutableListOf(), + var userIntimateList: List = mutableListOf(), + var userFavoriteMusicList: List = mutableListOf(), + var userKaleidxScopeList: List = mutableListOf(), + var userPlaylogList: List = mutableListOf(), override var gameId: String = "SDEZ", -): IExportClass { - constructor() : this(Mai2UserDetail(), Mai2UserExtend(), Mai2UserOption(), Mai2UserUdemae(), - mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), - mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), - mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf()) -} +): IExportClass