feat: [ongeki] data export/import

This commit is contained in:
Raymond
2026-06-06 22:19:12 -04:00
parent 6a10570fa6
commit b2feb9a130
3 changed files with 87 additions and 0 deletions

View File

@@ -2,8 +2,20 @@
import { fade } from "svelte/transition";
import { FADE_IN, FADE_OUT } from "../../libs/config";
import GameSettingFields from "./GameSettingFields.svelte";
function exportData() {
submitting = "export"
GAME.export('ongeki')
.then(data => download(JSON.stringify(data), `AquaDX_ongeki_export_${values[0]}.json`))
.catch(e => error = e.message)
.finally(() => submitting = "")
}
</script>
<div>
<GameSettingFields game="ongeki"/>
<button class="exportButton" on:click={exportData}>
<Icon icon="bxs:file-export"/>
{t('settings.export')}
</button>
</div>

View File

@@ -69,6 +69,8 @@
return 'mai2';
case 'SDHD':
return 'chu3';
case 'SDDT':
return 'ongeki';
default:
throw new Error(t('home.import.unknown-game'));
}

View File

@@ -0,0 +1,73 @@
package icu.samnyan.aqua.net.games.ongeki
import ext.API
import ext.returns
import ext.vars
import icu.samnyan.aqua.net.games.IExportClass
import icu.samnyan.aqua.net.games.ImportClass
import icu.samnyan.aqua.net.games.ImportController
import icu.samnyan.aqua.sega.ongeki.model.*
import icu.samnyan.aqua.sega.ongeki.OngekiRepos
import icu.samnyan.aqua.sega.ongeki.OngekiUserLinked
import icu.samnyan.aqua.sega.ongeki.OngekiUserRepos
import org.springframework.web.bind.annotation.RestController
import kotlin.reflect.full.declaredMembers
@RestController
@API("api/v2/game/ongeki")
class OngekiImport(
val repos: OngekiRepos,
) : ImportController<OngekiDataExport, UserData>(
"SDDT", "ongeki", OngekiDataExport::class,
exportFields = OngekiDataExport::class.vars().associateBy {
it.name.replace("List", "").lowercase()
},
exportRepos = OngekiDataExport::class.vars()
.filter { f -> f.name !in setOf("gameId", "userData") }
.associateWith { OngekiUserRepos::class.declaredMembers
.filter { f -> f returns OngekiUserLinked::class }
.firstOrNull { f -> f.name == it.name || f.name == it.name.replace("List", "") }
?.call(repos) as OngekiUserLinked<*>? ?: error("No matching field found for ${it.name}")
},
artemisRenames = mapOf() // TODO (almost nobody uses this so it's very low priority)
) {
override fun createEmpty() = OngekiDataExport()
override val userDataRepo = repos.u.data
}
data class OngekiDataExport(
override var gameId: String = "SDDT",
override var userData: UserData,
var userActivity: List<UserActivity>,
var userBoss: List<UserBoss>,
var userCard: List<UserCard>,
var userChapter: List<UserChapter>,
var userCharacter: List<UserCharacter>,
var userDeck: List<UserDeck>,
var userEventMusic: List<UserEventMusic>,
var userEventPoint: List<UserEventPoint>,
var userGeneralData: List<UserGeneralData>,
var userItem: List<UserItem>,
var userKop: List<UserKop>,
var userLoginBonus: List<UserLoginBonus>,
var userMemoryChapter: List<UserMemoryChapter>,
var userMissionPoint: List<UserMissionPoint>,
var userMusicDetail: List<UserMusicDetail>,
var userMusicItem: List<UserMusicItem>,
var userOption: UserOption,
var userPlaylog: List<UserPlaylog>,
var userRivalData: List<UserRival>,
var userScenario: List<UserScenario>,
var userStory: List<UserStory>,
var userTechCount: List<UserTechCount>,
var userTechEvent: List<UserTechEvent>,
var userTradeItem: List<UserTradeItem>,
var userTrainingRoom: List<UserTrainingRoom>,
var userEventMap: List<UserEventMap>,
var userSkin: List<UserSkin>,
var userRegions: List<UserRegions>,
var userGacha: List<UserGacha>,
): IExportClass<UserData> {
constructor() : this("SDDT", UserData(), ArrayList(), ArrayList(), ArrayList(), ArrayList(),ArrayList(), ArrayList(), ArrayList(), ArrayList(), ArrayList(),ArrayList(), ArrayList(), ArrayList(), ArrayList(), ArrayList(),ArrayList(), ArrayList(), ArrayList(), ArrayList(), ArrayList(),ArrayList(), ArrayList(), ArrayList(), ArrayList(), ArrayList(),ArrayList(), ArrayList(), ArrayList(), ArrayList(), ArrayList())
}