From bb2c8ae8e5a827b4e82d47eb730d5560ec99e6ff Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Mon, 26 Feb 2024 15:08:45 -0500 Subject: [PATCH] [+] Ongeki adaptor --- .../ongeki/ApiOngekiPlayerDataController.java | 2 +- .../java/icu/samnyan/aqua/net/games/Models.kt | 5 ++- .../java/icu/samnyan/aqua/net/games/Ongeki.kt | 37 +++++++++++++++++++ .../icu/samnyan/aqua/net/utils/GameScoring.kt | 15 ++++++++ .../dao/userdata/UserDataRepository.java | 5 ++- .../dao/userdata/UserPlaylogRepository.java | 27 -------------- .../dao/userdata/UserPlaylogRepository.kt | 25 +++++++++++++ .../sega/ongeki/model/userdata/UserData.java | 12 +++++- .../ongeki/model/userdata/UserPlaylog.java | 25 ++++++++++++- 9 files changed, 119 insertions(+), 34 deletions(-) create mode 100644 src/main/java/icu/samnyan/aqua/net/games/Ongeki.kt delete mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserPlaylogRepository.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserPlaylogRepository.kt diff --git a/src/main/java/icu/samnyan/aqua/api/controller/sega/game/ongeki/ApiOngekiPlayerDataController.java b/src/main/java/icu/samnyan/aqua/api/controller/sega/game/ongeki/ApiOngekiPlayerDataController.java index 226dc890..5cdd2d0b 100644 --- a/src/main/java/icu/samnyan/aqua/api/controller/sega/game/ongeki/ApiOngekiPlayerDataController.java +++ b/src/main/java/icu/samnyan/aqua/api/controller/sega/game/ongeki/ApiOngekiPlayerDataController.java @@ -455,7 +455,7 @@ public class ApiOngekiPlayerDataController { Card card; if (cardOptional.isPresent()) { card = cardOptional.get(); - Optional existUserData = userDataRepository.findByCard(cardOptional.get()); + Optional existUserData = Optional.ofNullable(userDataRepository.findByCard(cardOptional.get())); if (existUserData.isPresent()) { // return ResponseEntity.status(HttpStatus.BAD_REQUEST) // .body(new MessageResponse("This card already has a ongeki profile.")); diff --git a/src/main/java/icu/samnyan/aqua/net/games/Models.kt b/src/main/java/icu/samnyan/aqua/net/games/Models.kt index 19461680..f49304ca 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/Models.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/Models.kt @@ -1,6 +1,7 @@ package icu.samnyan.aqua.net.games import ext.API +import ext.RP data class TrendOut(val date: String, val rating: Int, val plays: Int) @@ -41,7 +42,7 @@ data class GenericGameSummary( interface GameApiController { @API("trend") - fun trend(username: String): List + fun trend(@RP username: String): List @API("user-summary") - fun userSummary(username: String): GenericGameSummary + fun userSummary(@RP username: String): GenericGameSummary } \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/net/games/Ongeki.kt b/src/main/java/icu/samnyan/aqua/net/games/Ongeki.kt new file mode 100644 index 00000000..df771b9c --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/net/games/Ongeki.kt @@ -0,0 +1,37 @@ +package icu.samnyan.aqua.net.games + +import ext.API +import icu.samnyan.aqua.net.db.AquaUserServices +import icu.samnyan.aqua.net.utils.TrendLog +import icu.samnyan.aqua.net.utils.findTrend +import icu.samnyan.aqua.net.utils.genericUserSummary +import icu.samnyan.aqua.net.utils.ongekiScores +import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserDataRepository +import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserGeneralDataRepository +import icu.samnyan.aqua.sega.ongeki.dao.userdata.UserPlaylogRepository +import org.springframework.web.bind.annotation.RestController + +@RestController +@API("api/v2/game/ongeki") +class Ongeki( + val us: AquaUserServices, + val userPlaylogRepository: UserPlaylogRepository, + val userDataRepository: UserDataRepository, + val userGeneralDataRepository: UserGeneralDataRepository +): GameApiController { + override fun trend(username: String) = us.byName(username) { u -> + findTrend(userPlaylogRepository.findByUser_Card_ExtId(u.ghostCard.extId) + .map { TrendLog(it.playDate, it.playerRating) }) + } + + private val shownRanks = ongekiScores.filter { it.first >= 950000 } + + override fun userSummary(username: String) = us.byName(username) { u -> +// val extra = userGeneralDataRepository.findByUser_Card_ExtId(u.ghostCard.extId) +// .associate { it.propertyKey to it.propertyValue } + + // TODO: Rating composition + + genericUserSummary(u, userDataRepository, userPlaylogRepository, shownRanks, mapOf()) + } +} \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/net/utils/GameScoring.kt b/src/main/java/icu/samnyan/aqua/net/utils/GameScoring.kt index fcd06362..293871f3 100644 --- a/src/main/java/icu/samnyan/aqua/net/utils/GameScoring.kt +++ b/src/main/java/icu/samnyan/aqua/net/utils/GameScoring.kt @@ -30,4 +30,19 @@ val chu3Scores = listOf( 60.0 to "B", 50.0 to "C", 0.0 to "D", +).map { (k, v) -> (k * 10000).toInt() to v } + +val ongekiScores = listOf( + 100.75 to "SSS+", + 100.0 to "SSS", + 99.0 to "SS", + 97.0 to "S", + 94.0 to "AAA", + 90.0 to "AA", + 85.0 to "A", + 80.0 to "BBB", + 75.0 to "BB", + 70.0 to "B", + 50.0 to "C", + 0.0 to "D", ).map { (k, v) -> (k * 10000).toInt() to v } \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserDataRepository.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserDataRepository.java index a348c206..43d02240 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserDataRepository.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserDataRepository.java @@ -1,5 +1,6 @@ package icu.samnyan.aqua.sega.ongeki.dao.userdata; +import icu.samnyan.aqua.net.utils.GenericUserDataRepo; import icu.samnyan.aqua.sega.general.model.Card; import icu.samnyan.aqua.sega.ongeki.model.userdata.UserData; import org.springframework.data.jpa.repository.JpaRepository; @@ -14,10 +15,10 @@ import java.util.Optional; * @author samnyan (privateamusement@protonmail.com) */ @Repository("OngekiUserDataRepository") -public interface UserDataRepository extends JpaRepository { +public interface UserDataRepository extends JpaRepository, GenericUserDataRepo { List findByCard_ExtIdIn(Collection userIds); - Optional findByCard(Card card); + UserData findByCard(Card card); Optional findByCard_ExtId(long aimeId); diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserPlaylogRepository.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserPlaylogRepository.java deleted file mode 100644 index ee879d9a..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserPlaylogRepository.java +++ /dev/null @@ -1,27 +0,0 @@ -package icu.samnyan.aqua.sega.ongeki.dao.userdata; - -import icu.samnyan.aqua.sega.ongeki.model.userdata.UserData; -import icu.samnyan.aqua.sega.ongeki.model.userdata.UserPlaylog; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -/** - * @author samnyan (privateamusement@protonmail.com) - */ -@Repository("OngekiUserPlaylogRepository") -public interface UserPlaylogRepository extends JpaRepository { - - List findByUser_Card_ExtId(long userId); - - Page findByUser_Card_ExtId(long userId, Pageable page); - - List findByUser_Card_ExtIdAndMusicIdAndLevel(long userId, int musicId, int level); - - @Transactional - void deleteByUser(UserData user); -} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserPlaylogRepository.kt b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserPlaylogRepository.kt new file mode 100644 index 00000000..21ffa6ed --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserPlaylogRepository.kt @@ -0,0 +1,25 @@ +package icu.samnyan.aqua.sega.ongeki.dao.userdata + +import icu.samnyan.aqua.net.utils.GenericPlaylogRepo +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserData +import icu.samnyan.aqua.sega.ongeki.model.userdata.UserPlaylog +import org.springframework.data.domain.Page +import org.springframework.data.domain.Pageable +import org.springframework.data.jpa.repository.JpaRepository +import org.springframework.stereotype.Repository +import org.springframework.transaction.annotation.Transactional + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("OngekiUserPlaylogRepository") +interface UserPlaylogRepository : JpaRepository, GenericPlaylogRepo { + fun findByUser_Card_ExtId(userId: Long): List + + fun findByUser_Card_ExtId(userId: Long, page: Pageable): Page + + fun findByUser_Card_ExtIdAndMusicIdAndLevel(userId: Long, musicId: Int, level: Int): List + + @Transactional + fun deleteByUser(user: UserData) +} diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserData.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserData.java index 1a8d9384..78a67bfc 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserData.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserData.java @@ -3,6 +3,7 @@ package icu.samnyan.aqua.sega.ongeki.model.userdata; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import icu.samnyan.aqua.net.utils.IGenericUserData; import icu.samnyan.aqua.sega.general.model.Card; import icu.samnyan.aqua.sega.util.jackson.AccessCodeSerializer; import lombok.AllArgsConstructor; @@ -20,7 +21,7 @@ import java.io.Serializable; @Data @NoArgsConstructor @AllArgsConstructor -public class UserData implements Serializable { +public class UserData implements Serializable, IGenericUserData { private static final long serialVersionUID = 1L; @@ -157,4 +158,13 @@ public class UserData implements Serializable { private int lastEmoneyBrand; + @Override + public int getIconId() { + return characterId; + } + + @Override + public long getTotalScore() { + return sumTechHighScore; + } } diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserPlaylog.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserPlaylog.java index 2e3ee50d..4f462e1a 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserPlaylog.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserPlaylog.java @@ -2,11 +2,14 @@ package icu.samnyan.aqua.sega.ongeki.model.userdata; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; +import icu.samnyan.aqua.net.utils.IGenericGamePlaylog; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import jakarta.persistence.*; +import org.jetbrains.annotations.NotNull; + import java.io.Serializable; /** @@ -17,7 +20,7 @@ import java.io.Serializable; @Data @NoArgsConstructor @AllArgsConstructor -public class UserPlaylog implements Serializable { +public class UserPlaylog implements Serializable, IGenericGamePlaylog { private static final long serialVersionUID = 1L; @@ -157,4 +160,24 @@ public class UserPlaylog implements Serializable { private int battlePoint; + @NotNull + @Override + public Object getDate() { + return playDate; + } + + @Override + public int getAchievement() { + return techScore; + } + + @Override + public int getTotalCombo() { + return maxCombo; + } + + @Override + public int getAfterRating() { + return playerRating; + } }