diff --git a/config/application.properties b/config/application.properties index b191d170..3fdc3fed 100644 --- a/config/application.properties +++ b/config/application.properties @@ -30,7 +30,7 @@ allnet.server.redirect=https://aquadx.net ## Http Server Port ## Only change this if you have a reverse proxy running. ## The game rely on 80 port for boot up command -server.port=80 +server.port=8080 ## Static file server ## This is used to server static files in /web/ directory, which is Aquaviewer 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 1156eaeb..e17ebb0a 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/ImportController.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/ImportController.kt @@ -16,6 +16,10 @@ import kotlin.io.path.Path import kotlin.io.path.writeText import kotlin.reflect.KClass +data class ExportOptions( + val playlogSince: String? = null +) + // Import class with renaming data class ImportClass( val type: KClass, @@ -54,6 +58,7 @@ abstract class ImportController, UserModel: val exportFields: Map>, val exportRepos: Map, IUserRepo>, val artemisRenames: Map>, + val customExporters: Map, (UserModel, ExportOptions) -> Any?> = emptyMap() ) { abstract fun createEmpty(): ExportModel abstract val userDataRepo: GenericUserDataRepo @@ -72,12 +77,19 @@ abstract class ImportController, UserModel: val listRepos = exportRepos.filter { it.key returns List::class } val singleRepos = exportRepos.filter { !(it.key returns List::class) } - fun export(u: AquaNetUser) = createEmpty().apply { + fun export(u: AquaNetUser): ExportModel = export(u, ExportOptions()) + + fun export(u: AquaNetUser, options: ExportOptions) = createEmpty().apply { gameId = game userData = userDataRepo.findByCard(u.ghostCard) ?: (404 - "User not found") exportRepos.forEach { (f, u) -> - if (f returns List::class) f.set(this, u.findByUser(userData)) - else u.findSingleByUser(userData)()?.let { f.set(this, it) } + 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) } + } } } 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 ee5dc278..90f83f1c 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 @@ -3,6 +3,7 @@ package icu.samnyan.aqua.net.games.mai2 import ext.API import ext.returns import ext.vars +import icu.samnyan.aqua.net.games.ExportOptions import icu.samnyan.aqua.net.games.IExportClass import icu.samnyan.aqua.net.games.ImportClass import icu.samnyan.aqua.net.games.ImportController @@ -44,7 +45,18 @@ class Mai2Import( "mai2_profile_option" to ImportClass(Mai2UserOption::class, mapOf("version" to null)), "mai2_score_best" to ImportClass(Mai2UserMusicDetail::class), "mai2_score_course" to ImportClass(Mai2UserCourse::class), - ) + ), + customExporters = run { + mapOf( + Maimai2DataExport::userPlaylogList to { user: Mai2UserDetail, options: ExportOptions -> + if (options.playlogSince != null) { + repos.userPlaylog.findByUserAndUserPlayDateAfter(user, options.playlogSince) + } else { + repos.userPlaylog.findByUser(user) + } + } + ) as Map, (Mai2UserDetail, ExportOptions) -> Any?> + } ) { override fun createEmpty() = Maimai2DataExport() override val userDataRepo = repos.userData @@ -74,4 +86,4 @@ data class Maimai2DataExport( mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf()) -} \ No newline at end of file +} diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/Repos.kt b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/Repos.kt index 309b95ce..3718971b 100644 --- a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/Repos.kt +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/Repos.kt @@ -104,6 +104,7 @@ interface Mai2UserPlaylogRepo : GenericPlaylogRepo, Mai2UserLin musicId: Int, userPlayDate: String ): MutableList + fun findByUserAndUserPlayDateAfter(user: Mai2UserDetail, userPlayDate: String): List } interface Mai2UserPrintDetailRepo : JpaRepository