From 67d2e52fbc2f9b6328acdbfaf23a1453c50b6b90 Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Tue, 11 Mar 2025 16:51:46 -0400 Subject: [PATCH] [+] Ongeki export --- src/main/java/ext/Ext.kt | 1 + .../sega/chuni/v2/external/Chu3DataExport.kt | 4 +- .../chuni/v2/external/ChuniDataImport.java | 4 +- .../samnyan/aqua/net/games/chu3/Chu3Import.kt | 4 +- .../samnyan/aqua/net/transfer/AllNetClient.kt | 1 + .../samnyan/aqua/net/transfer/DataBroker.kt | 53 ++++++++++++++++--- .../aqua/sega/chusan/handler/ChusanApis.kt | 4 +- .../aqua/sega/chusan/handler/ChusanCMApis.kt | 4 +- .../aqua/sega/chusan/model/Chu3Repos.kt | 20 +++---- .../sega/chusan/model/request/Chu3UserAll.kt | 4 +- .../chusan/model/request/UpsertUserGacha.kt | 4 +- .../{UserActivity.kt => Chu3UserActivity.kt} | 2 +- .../userdata/{UserItem.kt => Chu3UserItem.kt} | 2 +- 13 files changed, 74 insertions(+), 33 deletions(-) rename src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/{UserActivity.kt => Chu3UserActivity.kt} (93%) rename src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/{UserItem.kt => Chu3UserItem.kt} (96%) diff --git a/src/main/java/ext/Ext.kt b/src/main/java/ext/Ext.kt index b2b10881..9f6e1ca2 100644 --- a/src/main/java/ext/Ext.kt +++ b/src/main/java/ext/Ext.kt @@ -237,6 +237,7 @@ fun Str.path() = Path.of(this) operator fun Path.div(part: Str) = resolve(part) operator fun File.div(fileName: Str) = File(this, fileName) fun Str.ensureEndingSlash() = if (endsWith('/')) this else "$this/" +fun Str.ensureNoEndingSlash() = if (endsWith('/')) dropLast(1) else this fun T.logger() = LoggerFactory.getLogger(this::class.java) diff --git a/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/v2/external/Chu3DataExport.kt b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/v2/external/Chu3DataExport.kt index 6a88ae0e..cdde0ac4 100644 --- a/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/v2/external/Chu3DataExport.kt +++ b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/v2/external/Chu3DataExport.kt @@ -7,12 +7,12 @@ data class Chu3DataExport( override var gameId: String = "SDHD", override var userData: Chu3UserData, var userGameOption: UserGameOption, - var userActivityList: List, + var userActivityList: List, var userCharacterList: List, var userChargeList: List, var userCourseList: List, var userDuelList: List, - var userItemList: List, + var userItemList: List, var userMapList: List, var userMusicDetailList: List, var userPlaylogList: List, diff --git a/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/v2/external/ChuniDataImport.java b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/v2/external/ChuniDataImport.java index dfe2db53..83e7b21f 100644 --- a/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/v2/external/ChuniDataImport.java +++ b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/v2/external/ChuniDataImport.java @@ -17,13 +17,13 @@ import java.util.List; public class ChuniDataImport { private String gameId; private ExternalUserData userData; - private List userActivityList; + private List userActivityList; private List userCharacterList; private List userChargeList; private List userCourseList; private List userDuelList; private UserGameOption userGameOption; - private List userItemList; + private List userItemList; private List userMapList; private List userMusicDetailList; private List userPlaylogList; diff --git a/src/main/java/icu/samnyan/aqua/net/games/chu3/Chu3Import.kt b/src/main/java/icu/samnyan/aqua/net/games/chu3/Chu3Import.kt index 29a20edf..107f78ce 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/chu3/Chu3Import.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/chu3/Chu3Import.kt @@ -31,10 +31,10 @@ class Chu3Import( artemisRenames = mapOf( "chuni_item_character" to ImportClass(UserCharacter::class), "chuni_item_duel" to ImportClass(UserDuel::class), - "chuni_item_item" to ImportClass(UserItem::class, mapOf("isValid" to "valid")), + "chuni_item_item" to ImportClass(Chu3UserItem::class, mapOf("isValid" to "valid")), // "chuni_item_login_bonus" to ImportClass(UserLoginBonus::class, mapOf("isWatched" to "watched")), "chuni_item_map_area" to ImportClass(UserMap::class), - "chuni_profile_activity" to ImportClass(UserActivity::class, mapOf("activityId" to "id")), + "chuni_profile_activity" to ImportClass(Chu3UserActivity::class, mapOf("activityId" to "id")), "chuni_profile_charge" to ImportClass(UserCharge::class), "chuni_profile_data" to ImportClass(Chu3UserData::class, mapOf("user" to null, "version" to null, "isNetMember" to null)), "chuni_profile_option" to ImportClass(UserGameOption::class, mapOf("version" to null)), diff --git a/src/main/java/icu/samnyan/aqua/net/transfer/AllNetClient.kt b/src/main/java/icu/samnyan/aqua/net/transfer/AllNetClient.kt index f517c7ad..b16a9ecd 100644 --- a/src/main/java/icu/samnyan/aqua/net/transfer/AllNetClient.kt +++ b/src/main/java/icu/samnyan/aqua/net/transfer/AllNetClient.kt @@ -47,6 +47,7 @@ class AllNetClient(val dns: String, val keychip: String, val game: String, val v fun findDataBroker(log: (String) -> Unit) = when (game) { "SDHD" -> ChusanDataBroker(this, log) "SDEZ", "SDGA" -> MaimaiDataBroker(this, log) + "SDDT" -> OngekiDataBroker(this, log) else -> throw IllegalArgumentException("Unsupported game: $game") } } \ No newline at end of file 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 d475c14b..667f7f3c 100644 --- a/src/main/java/icu/samnyan/aqua/net/transfer/DataBroker.kt +++ b/src/main/java/icu/samnyan/aqua/net/transfer/DataBroker.kt @@ -2,13 +2,15 @@ package icu.samnyan.aqua.net.transfer import ext.* import icu.samnyan.aqua.sega.chusan.model.request.Chu3UserAll -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.Chu3UserActivity +import icu.samnyan.aqua.sega.chusan.model.userdata.Chu3UserItem import icu.samnyan.aqua.sega.chusan.model.userdata.UserMusicDetail import icu.samnyan.aqua.sega.maimai2.model.request.Mai2UserAll import icu.samnyan.aqua.sega.maimai2.model.userdata.Mai2UserFavorite import icu.samnyan.aqua.sega.maimai2.model.userdata.Mai2UserItem import icu.samnyan.aqua.sega.maimai2.model.userdata.Mai2UserMusicDetail +import icu.samnyan.aqua.sega.ongeki.model.request.UpsertUserAll +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserItem import icu.samnyan.aqua.sega.util.jackson.BasicMapper import icu.samnyan.aqua.sega.util.jackson.IMapper import icu.samnyan.aqua.sega.util.jackson.StringMapper @@ -70,13 +72,10 @@ class ChusanDataBroker(allNet: AllNetClient, log: (String) -> Unit): DataBroker( userGameOption = ls("GetUserOptionApi".get("userGameOption", userId)) userCharacterList = "GetUserCharacterApi".get("userCharacterList", paged) userActivityList = (1..5).flatMap { - "GetUserActivityApi".get>("userActivityList", userId + mapOf("kind" to it)) + "GetUserActivityApi".get>("userActivityList", userId + mapOf("kind" to it)) } userItemList = (1..12).flatMap { - "GetUserItemApi".get>( - "userItemList", - userId + mapOf("nextIndex" to 10000000000 * it, "maxCount" to 10000000) - ) + "GetUserItemApi".get>("userItemList", paged + mapOf("nextIndex" to 10000000000 * it)) } userRecentRatingList = "GetUserRecentRatingApi".get("userRecentRatingList", userId) userMusicDetailList = "GetUserMusicApi".get>("userMusicList", paged) @@ -125,5 +124,45 @@ class MaimaiDataBroker(allNet: AllNetClient, log: (String) -> Unit): DataBroker( // TODO: userFavoriteMusicList }.toJson() } +} + +class OngekiDataBroker(allNet: AllNetClient, log: (String) -> Unit): DataBroker(allNet, log) { + override val mapper = BasicMapper() + override val url by lazy { allNet.gameUrl.ensureNoEndingSlash() } + + override fun pull(): String { + val (userId, paged) = prePull() + + return UpsertUserAll().apply { + userData = ls("GetUserDataApi".get("userData", userId)) + userOption = ls("GetUserOptionApi".get("userOption", userId)) + userMusicItemList = "GetUserMusicItemApi".get("userMusicItemList", paged) + userBossList = "GetUserBossApi".get("userBossList", userId) + userMusicDetailList = "GetUserMusicApi".get("userMusicList", paged) + userTechCountList = "GetUserTechCountApi".get("userTechCountList", userId) + userCardList = "GetUserCardApi".get("userCardList", paged) + userCharacterList = "GetUserCharacterApi".get("userCharacterList", paged) + userStoryList = "GetUserStoryApi".get("userStoryList", userId) + userChapterList = "GetUserChapterApi".get("userChapterList", userId) + userMemoryChapterList = "GetUserMemoryChapterApi".get("userMemoryChapterList", userId) + userDeckList = "GetUserDeckByKeyApi".get("userDeckList", userId + mapOf("authKey" to "")) + userTrainingRoomList = "GetUserTrainingRoomByKeyApi".get("userTrainingRoomList", userId + mapOf("authKey" to "")) + userActivityList = "GetUserActivityApi".get("userActivityList", userId + mapOf("kind" to 1)) + userRatinglogList = "GetUserRatinglogApi".get("userRatinglogList", userId) + userRecentRatingList = "GetUserRecentRatingApi".get("userRecentRatingList", userId) + userItemList = ls(2, 3, 4, 8, 9, 11, 12, 13, 14, 15, 16, 17, 19, 20).flatMap { + "GetUserItemApi".get>("userItemList", paged + mapOf("nextIndex" to 10000000000 * it)) + } + userEventPointList = "GetUserEventPointApi".get("userEventPointList", userId) + userMissionPointList = "GetUserMissionPointApi".get("userMissionPointList", userId) + userLoginBonusList = "GetUserLoginBonusApi".get("userLoginBonusList", userId) + userScenarioList = "GetUserScenarioApi".get("userScenarioList", userId) + userTradeItemList = "GetUserTradeItemApi".get("userTradeItemList", userId + mapOf("startChapterId" to 0, "endChapterId" to 99999)) + userEventMusicList = "GetUserEventMusicApi".get("userEventMusicList", userId) + userTechEventList = "GetUserTechEventRankingApi".get("userTechEventRankingList", userId) + userKopList = "GetUserKopApi".get("userKopList", userId) + }.toJson() + } +} } \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanApis.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanApis.kt index 73f4e354..b4c755bf 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanApis.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanApis.kt @@ -5,7 +5,7 @@ import icu.samnyan.aqua.sega.allnet.TokenChecker import icu.samnyan.aqua.sega.chusan.ChusanController import icu.samnyan.aqua.sega.chusan.ChusanData import icu.samnyan.aqua.sega.chusan.model.request.UserCMissionResp -import icu.samnyan.aqua.sega.chusan.model.userdata.UserItem +import icu.samnyan.aqua.sega.chusan.model.userdata.Chu3UserItem import icu.samnyan.aqua.sega.chusan.model.userdata.UserMusicDetail import icu.samnyan.aqua.sega.general.model.response.UserRecentRating import java.time.format.DateTimeFormatter @@ -179,7 +179,7 @@ fun ChusanController.chusanInit() { db.userData.findByCard_ExtId(uid)()?.card?.aquaUser?.gameOptions?.let { if (it.chusanInfinitePenguins && kind == 5) { items.removeAll { it.itemId in penguins } - items.addAll(penguins.map { UserItem(kind, it, 999, true) }) + items.addAll(penguins.map { Chu3UserItem(kind, it, 999, true) }) } } diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanCMApis.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanCMApis.kt index d72cfa94..6116ed6b 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanCMApis.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanCMApis.kt @@ -5,7 +5,7 @@ import icu.samnyan.aqua.sega.chusan.ChusanController import icu.samnyan.aqua.sega.chusan.model.request.UpsertUserGacha import icu.samnyan.aqua.sega.chusan.model.request.UserEmoney import icu.samnyan.aqua.sega.chusan.model.userdata.UserCardPrintState -import icu.samnyan.aqua.sega.chusan.model.userdata.UserItem +import icu.samnyan.aqua.sega.chusan.model.userdata.Chu3UserItem import java.time.LocalDateTime fun ChusanController.cmApiInit() { @@ -76,7 +76,7 @@ fun ChusanController.cmApiInit() { "CMUpsertUserPrintSubtract" api@ { val userCardPrintState = cmMapper.convert(parsing { data["userCardPrintState"]!! }) - val userItemList = cmMapper.convert>(parsing { data["userItemList"]!! }) + val userItemList = cmMapper.convert>(parsing { data["userItemList"]!! }) val u = db.userData.findByCard_ExtId(uid)() ?: return@api null diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/model/Chu3Repos.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/model/Chu3Repos.kt index 280978f5..936c316f 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/model/Chu3Repos.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/model/Chu3Repos.kt @@ -40,11 +40,11 @@ interface Chu3UserLoginBonusRepo : JpaRepository { fun findLoginBonus(userId: Int, version: Int, presetId: Long): Optional } -interface Chu3UserActivityRepo : Chu3UserLinked { - fun findTopByUserAndActivityIdAndKindOrderByIdDesc(user: Chu3UserData, activityId: Int, kind: Int): Optional - fun findByUserAndActivityIdAndKind(user: Chu3UserData, activityId: Int, kind: Int): UserActivity? +interface Chu3UserActivityRepo : Chu3UserLinked { + fun findTopByUserAndActivityIdAndKindOrderByIdDesc(user: Chu3UserData, activityId: Int, kind: Int): Optional + fun findByUserAndActivityIdAndKind(user: Chu3UserData, activityId: Int, kind: Int): Chu3UserActivity? - fun findAllByUser_Card_ExtIdAndKind(extId: Long, kind: Int): List + fun findAllByUser_Card_ExtIdAndKind(extId: Long, kind: Int): List } interface Chu3UserCardPrintStateRepo : Chu3UserLinked { @@ -89,14 +89,14 @@ interface Chu3UserGeneralDataRepo : Chu3UserLinked { fun findByUser_Card_ExtIdAndPropertyKey(extId: Long, key: String): Optional } -interface Chu3UserItemRepo : Chu3UserLinked { - fun findAllByUser(user: Chu3UserData): List - fun findTopByUserAndItemIdAndItemKindOrderByIdDesc(user: Chu3UserData, itemId: Int, itemKind: Int): Optional - fun findByUserAndItemIdAndItemKind(user: Chu3UserData, itemId: Int, itemKind: Int): UserItem? +interface Chu3UserItemRepo : Chu3UserLinked { + fun findAllByUser(user: Chu3UserData): List + fun findTopByUserAndItemIdAndItemKindOrderByIdDesc(user: Chu3UserData, itemId: Int, itemKind: Int): Optional + fun findByUserAndItemIdAndItemKind(user: Chu3UserData, itemId: Int, itemKind: Int): Chu3UserItem? - fun findAllByUser_Card_ExtIdAndItemKind(extId: Long, itemKind: Int, pageable: Pageable): Page + fun findAllByUser_Card_ExtIdAndItemKind(extId: Long, itemKind: Int, pageable: Pageable): Page - fun findAllByUser_Card_ExtIdAndItemKind(extId: Long, itemKind: Int): List + fun findAllByUser_Card_ExtIdAndItemKind(extId: Long, itemKind: Int): List } interface Chu3UserMapRepo : Chu3UserLinked { diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/model/request/Chu3UserAll.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/model/request/Chu3UserAll.kt index 3b0d1d20..95e29052 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/model/request/Chu3UserAll.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/model/request/Chu3UserAll.kt @@ -41,9 +41,9 @@ class Chu3UserAll( var userData: List? = null, var userGameOption: List? = null, var userCharacterList: List? = null, - var userItemList: List? = null, + var userItemList: List? = null, var userMusicDetailList: List? = null, - var userActivityList: List? = null, + var userActivityList: List? = null, var userRecentRatingList: List? = null, var userPlaylogList: List? = null, var userChargeList: List? = null, diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/model/request/UpsertUserGacha.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/model/request/UpsertUserGacha.kt index 92c3ab39..ad264c3b 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/model/request/UpsertUserGacha.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/model/request/UpsertUserGacha.kt @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty import icu.samnyan.aqua.sega.chusan.model.GameGachaCard import icu.samnyan.aqua.sega.chusan.model.userdata.Chu3UserData import icu.samnyan.aqua.sega.chusan.model.userdata.UserGacha -import icu.samnyan.aqua.sega.chusan.model.userdata.UserItem +import icu.samnyan.aqua.sega.chusan.model.userdata.Chu3UserItem import java.io.Serializable class UpsertUserGacha : Serializable { @@ -13,7 +13,7 @@ class UpsertUserGacha : Serializable { var userCharacterList: List? = null var userCardList: List? = null var gameGachaCardList: List? = null - var userItemList: List? = null + var userItemList: List? = null @JsonProperty("isNewCharacterList") var isNewCharacterList: String? = null diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserActivity.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/Chu3UserActivity.kt similarity index 93% rename from src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserActivity.kt rename to src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/Chu3UserActivity.kt index ef5d527b..301f3fb1 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserActivity.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/Chu3UserActivity.kt @@ -8,7 +8,7 @@ import jakarta.persistence.UniqueConstraint @Entity(name = "ChusanUserActivity") @Table(name = "chusan_user_activity", uniqueConstraints = [UniqueConstraint(columnNames = ["user_id", "kind", "activity_id"])]) -class UserActivity : Chu3UserEntity() { +class Chu3UserActivity : Chu3UserEntity() { var kind = 0 @JsonProperty("id") @Column(name = "activity_id") diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserItem.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/Chu3UserItem.kt similarity index 96% rename from src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserItem.kt rename to src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/Chu3UserItem.kt index 94fd554f..8419c0a9 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserItem.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/Chu3UserItem.kt @@ -7,7 +7,7 @@ import jakarta.persistence.UniqueConstraint @Entity(name = "ChusanUserItem") @Table(name = "chusan_user_item", uniqueConstraints = [UniqueConstraint(columnNames = ["user_id", "item_id", "item_kind"])]) -class UserItem( +class Chu3UserItem( var itemKind: Int = 0, var itemId: Int = 0, var stock: Int = 1,