add mai2 fields

This commit is contained in:
Menci 2025-06-25 17:59:17 +08:00 committed by Azalea
parent ac6cbb9dd3
commit 11dbe849cf
2 changed files with 35 additions and 37 deletions

View File

@ -84,13 +84,11 @@ abstract class ImportController<ExportModel: IExportClass<UserModel>, UserModel:
gameId = game gameId = game
userData = userDataRepo.findByCard(u.ghostCard) ?: (404 - "User not found") userData = userDataRepo.findByCard(u.ghostCard) ?: (404 - "User not found")
exportRepos.forEach { (f, u) -> exportRepos.forEach { (f, u) ->
val customExporter = customExporters[f] if (f returns List::class) f.set(this, u.findByUser(userData))
if (customExporter != null) { else u.findSingleByUser(userData)()?.let { f.set(this, it) }
customExporter(userData, options)?.let { f.set(this, it) } }
} else { customExporters.forEach { (f, exporter) ->
if (f returns List::class) f.set(this, u.findByUser(userData)) exporter(userData, options)?.let { f.set(this, it) }
else u.findSingleByUser(userData)()?.let { f.set(this, it) }
}
} }
} }
@ -106,8 +104,9 @@ abstract class ImportController<ExportModel: IExportClass<UserModel>, UserModel:
val export = json.parseJackson(exportClass.java) val export = json.parseJackson(exportClass.java)
if (!export.gameId.equals(game, true)) 400 - "Invalid game ID" 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<IUserEntity<UserModel>> }.vNotNull() val lists = listRepos.toList().associate { (f, r) -> r to f.get(export) as List<IUserEntity<UserModel>> }.vNotNull()
val singles = singleRepos.toList().filter { (f, _) -> f !in customImporters }.associate { (f, r) -> r to f.get(export) as IUserEntity<UserModel> }.vNotNull() val singles = singleRepos.toList().associate { (f, r) -> r to f.get(export) as IUserEntity<UserModel> }.vNotNull()
var repoFieldMap = exportRepos.toList().associate { (f, r) -> r to f }
// Validate new user data // Validate new user data
// Check that all ids are 0 (this should be true since all ids are @JsonIgnore) // Check that all ids are 0 (this should be true since all ids are @JsonIgnore)

View File

@ -24,7 +24,7 @@ class Mai2Import(
it.name.replace("List", "").lowercase() it.name.replace("List", "").lowercase()
}, },
exportRepos = Maimai2DataExport::class.vars() exportRepos = Maimai2DataExport::class.vars()
.filter { f -> f.name !in setOf("gameId", "userData") } .filter { f -> f.name !in setOf("gameId", "userData", "userPlaylogList", "userFavoriteMusicList") }
.associateWith { field -> .associateWith { field ->
val repoName = when (field.name) { val repoName = when (field.name) {
"userKaleidxScopeList" -> "userKaleidx" "userKaleidxScopeList" -> "userKaleidx"
@ -70,14 +70,18 @@ class Mai2Import(
} }
) as Map<kotlin.reflect.KMutableProperty1<Maimai2DataExport, Any>, (Mai2UserDetail, ExportOptions) -> Any?>, ) as Map<kotlin.reflect.KMutableProperty1<Maimai2DataExport, Any>, (Mai2UserDetail, ExportOptions) -> Any?>,
customImporters = mapOf( 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 -> Maimai2DataExport::userFavoriteMusicList to { export: Maimai2DataExport, user: Mai2UserDetail ->
val favoriteMusicList = export.userFavoriteMusicList val favoriteMusicList = export.userFavoriteMusicList
if (favoriteMusicList.isNotEmpty()) { if (favoriteMusicList.isNotEmpty()) {
val key = "favorite_music" 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) val data = repos.userGeneralData.findByUserAndPropertyKey(user, key).orElse(null)
?: Mai2UserGeneralData().apply { this.user = user; propertyKey = key } ?: Mai2UserGeneralData().apply { this.user = user; propertyKey = key }
repos.userGeneralData.save(data.apply { 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( data class Maimai2DataExport(
override var userData: Mai2UserDetail, override var userData: Mai2UserDetail = Mai2UserDetail(),
var userExtend: Mai2UserExtend, var userExtend: Mai2UserExtend = Mai2UserExtend(),
var userOption: Mai2UserOption, var userOption: Mai2UserOption = Mai2UserOption(),
var userUdemae: Mai2UserUdemae, var userUdemae: Mai2UserUdemae = Mai2UserUdemae(),
var mapEncountNpcList: List<Mai2MapEncountNpc>, var mapEncountNpcList: List<Mai2MapEncountNpc> = mutableListOf(),
var userActList: List<Mai2UserAct>, var userActList: List<Mai2UserAct> = mutableListOf(),
var userCharacterList: List<Mai2UserCharacter>, var userCharacterList: List<Mai2UserCharacter> = mutableListOf(),
var userChargeList: List<Mai2UserCharge>, var userChargeList: List<Mai2UserCharge> = mutableListOf(),
var userCourseList: List<Mai2UserCourse>, var userCourseList: List<Mai2UserCourse> = mutableListOf(),
var userFavoriteList: List<Mai2UserFavorite>, var userFavoriteList: List<Mai2UserFavorite> = mutableListOf(),
var userFriendSeasonRankingList: List<Mai2UserFriendSeasonRanking>, var userFriendSeasonRankingList: List<Mai2UserFriendSeasonRanking> = mutableListOf(),
var userGeneralDataList: List<Mai2UserGeneralData>, var userGeneralDataList: List<Mai2UserGeneralData> = mutableListOf(),
var userItemList: List<Mai2UserItem>, var userItemList: List<Mai2UserItem> = mutableListOf(),
var userLoginBonusList: List<Mai2UserLoginBonus>, var userLoginBonusList: List<Mai2UserLoginBonus> = mutableListOf(),
var userMapList: List<Mai2UserMap>, var userMapList: List<Mai2UserMap> = mutableListOf(),
var userMusicDetailList: List<Mai2UserMusicDetail>, var userMusicDetailList: List<Mai2UserMusicDetail> = mutableListOf(),
var userIntimateList: List<Mai2UserIntimate>, var userIntimateList: List<Mai2UserIntimate> = mutableListOf(),
var userFavoriteMusicList: List<Mai2UserFavoriteItem>, var userFavoriteMusicList: List<Mai2UserFavoriteItem> = mutableListOf(),
var userKaleidxScopeList: List<Mai2UserKaleidx>, var userKaleidxScopeList: List<Mai2UserKaleidx> = mutableListOf(),
var userPlaylogList: List<Mai2UserPlaylog>, var userPlaylogList: List<Mai2UserPlaylog> = mutableListOf(),
override var gameId: String = "SDEZ", override var gameId: String = "SDEZ",
): IExportClass<Mai2UserDetail> { ): IExportClass<Mai2UserDetail>
constructor() : this(Mai2UserDetail(), Mai2UserExtend(), Mai2UserOption(), Mai2UserUdemae(),
mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(),
mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(),
mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf())
}