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
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<ExportModel: IExportClass<UserModel>, 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<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 lists = listRepos.toList().associate { (f, r) -> r to f.get(export) as List<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
// 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()
},
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<kotlin.reflect.KMutableProperty1<Maimai2DataExport, Any>, (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<Mai2MapEncountNpc>,
var userActList: List<Mai2UserAct>,
var userCharacterList: List<Mai2UserCharacter>,
var userChargeList: List<Mai2UserCharge>,
var userCourseList: List<Mai2UserCourse>,
var userFavoriteList: List<Mai2UserFavorite>,
var userFriendSeasonRankingList: List<Mai2UserFriendSeasonRanking>,
var userGeneralDataList: List<Mai2UserGeneralData>,
var userItemList: List<Mai2UserItem>,
var userLoginBonusList: List<Mai2UserLoginBonus>,
var userMapList: List<Mai2UserMap>,
var userMusicDetailList: List<Mai2UserMusicDetail>,
var userIntimateList: List<Mai2UserIntimate>,
var userFavoriteMusicList: List<Mai2UserFavoriteItem>,
var userKaleidxScopeList: List<Mai2UserKaleidx>,
var userPlaylogList: List<Mai2UserPlaylog>,
override var userData: Mai2UserDetail = Mai2UserDetail(),
var userExtend: Mai2UserExtend = Mai2UserExtend(),
var userOption: Mai2UserOption = Mai2UserOption(),
var userUdemae: Mai2UserUdemae = Mai2UserUdemae(),
var mapEncountNpcList: List<Mai2MapEncountNpc> = mutableListOf(),
var userActList: List<Mai2UserAct> = mutableListOf(),
var userCharacterList: List<Mai2UserCharacter> = mutableListOf(),
var userChargeList: List<Mai2UserCharge> = mutableListOf(),
var userCourseList: List<Mai2UserCourse> = mutableListOf(),
var userFavoriteList: List<Mai2UserFavorite> = mutableListOf(),
var userFriendSeasonRankingList: List<Mai2UserFriendSeasonRanking> = mutableListOf(),
var userGeneralDataList: List<Mai2UserGeneralData> = mutableListOf(),
var userItemList: List<Mai2UserItem> = mutableListOf(),
var userLoginBonusList: List<Mai2UserLoginBonus> = mutableListOf(),
var userMapList: List<Mai2UserMap> = mutableListOf(),
var userMusicDetailList: List<Mai2UserMusicDetail> = mutableListOf(),
var userIntimateList: List<Mai2UserIntimate> = mutableListOf(),
var userFavoriteMusicList: List<Mai2UserFavoriteItem> = mutableListOf(),
var userKaleidxScopeList: List<Mai2UserKaleidx> = mutableListOf(),
var userPlaylogList: List<Mai2UserPlaylog> = mutableListOf(),
override var gameId: String = "SDEZ",
): IExportClass<Mai2UserDetail> {
constructor() : this(Mai2UserDetail(), Mai2UserExtend(), Mai2UserOption(), Mai2UserUdemae(),
mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(),
mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(),
mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf())
}
): IExportClass<Mai2UserDetail>