From 9b7f50aebba19a6af9503c37c4566a13061f5543 Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Tue, 11 Mar 2025 02:48:56 -0400 Subject: [PATCH] [+] Maimai data broker --- .../samnyan/aqua/net/transfer/DataBroker.kt | 55 +++++++++++++++---- 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/src/main/java/icu/samnyan/aqua/net/transfer/DataBroker.kt b/src/main/java/icu/samnyan/aqua/net/transfer/DataBroker.kt index cffcb4de..c3929971 100644 --- a/src/main/java/icu/samnyan/aqua/net/transfer/DataBroker.kt +++ b/src/main/java/icu/samnyan/aqua/net/transfer/DataBroker.kt @@ -5,27 +5,39 @@ import icu.samnyan.aqua.sega.chusan.model.request.UpsertUserAll import icu.samnyan.aqua.sega.chusan.model.userdata.UserActivity import icu.samnyan.aqua.sega.chusan.model.userdata.UserItem import icu.samnyan.aqua.sega.chusan.model.userdata.UserMusicDetail +import icu.samnyan.aqua.sega.util.jackson.BasicMapper +import icu.samnyan.aqua.sega.util.jackson.IMapper import icu.samnyan.aqua.sega.util.jackson.StringMapper -interface DataBroker { - fun pull(): String -} +abstract class DataBroker( + val allNet: AllNetClient, + val log: (String) -> Unit, +) { + abstract val mapper: IMapper + abstract val url: String - -class ChusanDataBroker(val allNet: AllNetClient, val log: (String) -> Unit): DataBroker { - val mapper = StringMapper() - val url by lazy { "${allNet.gameUrl.ensureEndingSlash()}ChuniServlet" } - - inline fun String.get(key: String, data: JDict) = "$url/$this".request() + inline fun String.get(key: String, data: JDict): T = "$url/$this".request() .postZ(mapper.write(data)) .bodyMaybeZ() .jsonMap()[key] - .let { mapper.convert(it) } - .also { + ?.let { mapper.convert(it) } + ?.also { if (it is List<*>) log("✅ $this: ${it.size}") else log("✅ $this") - } + } ?: throw NullPointerException("❌ $this") + + abstract fun pull(): String + fun push(data: String) { + log("Pushing data") + "UpsertUserAll".request().postZ(data).bodyMaybeZ().also { log(it) } + } +} + + +class ChusanDataBroker(allNet: AllNetClient, log: (String) -> Unit): DataBroker(allNet, log) { + override val mapper = StringMapper() + override val url by lazy { "${allNet.gameUrl.ensureEndingSlash()}ChuniServlet" } class UserMusicWrapper(var userMusicDetailList: List) @@ -59,4 +71,23 @@ class ChusanDataBroker(val allNet: AllNetClient, val log: (String) -> Unit): Dat userUnlockChallengeList = "GetUserUCApi".get("userUnlockChallengeList", userId) }) } +} + + +class MaimaiDataBroker(allNet: AllNetClient, log: (String) -> Unit): DataBroker(allNet, log) { + override val mapper = BasicMapper() + override val url by lazy { "${allNet.gameUrl.ensureEndingSlash()}Maimai2Servlet" } + + override fun pull(): String { + log("Game URL: ${allNet.gameUrl}") + log("User ID: ${allNet.userId}") + + val userId = mapOf("userId" to allNet.userId) + val paged = userId + mapOf("nextIndex" to 0, "maxCount" to 10000000) + + return UpsertUserAll().apply { + userData = ls("GetUserDataApi".get("userData", userId)) + }.toJson() + } + } \ No newline at end of file