From 50dfb95c4889c7de56e25795c7ef598159f21eb9 Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Mon, 26 Feb 2024 11:55:43 -0500 Subject: [PATCH] [+] Chusan user summary --- .../java/icu/samnyan/aqua/net/games/Chusan.kt | 45 +++++++++++++++++++ .../dao/userdata/UserDataRepository.java | 10 ++++- .../userdata/UserGeneralDataRepository.java | 20 --------- .../dao/userdata/UserGeneralDataRepository.kt | 19 ++++++++ .../dao/userdata/UserPlaylogRepository.java | 3 +- .../sega/chusan/model/userdata/UserData.java | 12 ++++- .../chusan/model/userdata/UserPlaylog.java | 25 ++++++++++- .../sega/chusan/service/UserDataService.java | 2 +- 8 files changed, 110 insertions(+), 26 deletions(-) create mode 100644 src/main/java/icu/samnyan/aqua/net/games/Chusan.kt delete mode 100644 src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserGeneralDataRepository.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserGeneralDataRepository.kt diff --git a/src/main/java/icu/samnyan/aqua/net/games/Chusan.kt b/src/main/java/icu/samnyan/aqua/net/games/Chusan.kt new file mode 100644 index 00000000..ca897109 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/net/games/Chusan.kt @@ -0,0 +1,45 @@ +package icu.samnyan.aqua.net.games + +import ext.API +import ext.RP +import ext.Str +import icu.samnyan.aqua.net.db.AquaUserServices +import icu.samnyan.aqua.net.utils.TrendLog +import icu.samnyan.aqua.net.utils.chu3Scores +import icu.samnyan.aqua.net.utils.findTrend +import icu.samnyan.aqua.net.utils.genericUserSummary +import icu.samnyan.aqua.sega.chusan.dao.userdata.UserDataRepository +import icu.samnyan.aqua.sega.chusan.dao.userdata.UserGeneralDataRepository +import icu.samnyan.aqua.sega.chusan.dao.userdata.UserPlaylogRepository +import org.springframework.web.bind.annotation.RestController +import java.time.format.DateTimeFormatter + +@RestController +@API("api/v2/game/chu3") +class Chusan( + val us: AquaUserServices, + val userPlaylogRepository: UserPlaylogRepository, + val userDataRepository: UserDataRepository, + val userGeneralDataRepository: UserGeneralDataRepository +): GameApiController +{ + override fun trend(@RP username: Str): List = us.byName(username) { u -> + val fmt = DateTimeFormatter.ofPattern("YYYY-MM-DD") + findTrend(userPlaylogRepository.findByUser_Card_ExtId(u.ghostCard.extId) + .map { TrendLog(fmt.format(it.playDate), it.playerRating) }) + } + + // Only show > AAA rank + private val shownRanks = chu3Scores.filter { it.first >= 95 } + + override fun userSummary(@RP username: Str) = us.byName(username) { u -> + // Summary values: total plays, player rating, server-wide ranking + // number of each rank, max combo, number of full combo, number of all perfect + val extra = userGeneralDataRepository.findByUser_Card_ExtId(u.ghostCard.extId) + .associate { it.propertyKey to it.propertyValue } + + // TODO: Rating composition + + genericUserSummary(u, userDataRepository, userPlaylogRepository, shownRanks, emptyMap()) + } +} \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserDataRepository.java b/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserDataRepository.java index 712e2808..ed75ffa4 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserDataRepository.java +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserDataRepository.java @@ -1,8 +1,10 @@ package icu.samnyan.aqua.sega.chusan.dao.userdata; +import icu.samnyan.aqua.net.utils.GenericUserDataRepo; import icu.samnyan.aqua.sega.chusan.model.userdata.UserData; import icu.samnyan.aqua.sega.general.model.Card; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import java.util.Optional; @@ -11,9 +13,13 @@ import java.util.Optional; * @author samnyan (privateamusement@protonmail.com) */ @Repository("ChusanUserDataRepository") -public interface UserDataRepository extends JpaRepository { +public interface UserDataRepository extends JpaRepository, GenericUserDataRepo { - Optional findByCard(Card card); + UserData findByCard(Card card); Optional findByCard_ExtId(Long extId); + + @Override + @Query("select count(*) from Maimai2UserData where playerRating > :rating") + long getRanking(int rating); } diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserGeneralDataRepository.java b/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserGeneralDataRepository.java deleted file mode 100644 index 657ba8a9..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserGeneralDataRepository.java +++ /dev/null @@ -1,20 +0,0 @@ -package icu.samnyan.aqua.sega.chusan.dao.userdata; - -import icu.samnyan.aqua.sega.chusan.model.userdata.UserData; -import icu.samnyan.aqua.sega.chusan.model.userdata.UserGeneralData; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -/** - * @author samnyan (privateamusement@protonmail.com) - */ -@Repository("ChusanUserGeneralDataRepository") -public interface UserGeneralDataRepository extends JpaRepository { - - Optional findByUserAndPropertyKey(UserData user, String key); - - Optional findByUser_Card_ExtIdAndPropertyKey(Long extId, String key); - -} diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserGeneralDataRepository.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserGeneralDataRepository.kt new file mode 100644 index 00000000..e0080ca8 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserGeneralDataRepository.kt @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.chusan.dao.userdata + +import icu.samnyan.aqua.sega.chusan.model.userdata.UserData +import icu.samnyan.aqua.sega.chusan.model.userdata.UserGeneralData +import org.springframework.data.jpa.repository.JpaRepository +import org.springframework.stereotype.Repository +import java.util.* + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Repository("ChusanUserGeneralDataRepository") +interface UserGeneralDataRepository : JpaRepository { + fun findByUserAndPropertyKey(user: UserData, key: String): Optional + + fun findByUser_Card_ExtIdAndPropertyKey(extId: Long, key: String): Optional + + fun findByUser_Card_ExtId(extId: Long): List +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserPlaylogRepository.java b/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserPlaylogRepository.java index 05da8072..53e200c7 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserPlaylogRepository.java +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserPlaylogRepository.java @@ -1,5 +1,6 @@ package icu.samnyan.aqua.sega.chusan.dao.userdata; +import icu.samnyan.aqua.net.utils.GenericPlaylogRepo; import icu.samnyan.aqua.sega.chusan.model.userdata.UserPlaylog; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -12,7 +13,7 @@ import java.util.List; * @author samnyan (privateamusement@protonmail.com) */ @Repository("ChusanUserPlaylogRepository") -public interface UserPlaylogRepository extends JpaRepository { +public interface UserPlaylogRepository extends JpaRepository, GenericPlaylogRepo { List findByUser_Card_ExtIdAndLevelNot(Long extId, int levelNot, Pageable page); Page findByUser_Card_ExtId(Long extId, Pageable page); diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserData.java b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserData.java index 0bb947c3..c6664ed7 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserData.java +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserData.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import icu.samnyan.aqua.net.utils.IGenericUserData; import icu.samnyan.aqua.sega.chusan.model.response.data.UserEmoney; import icu.samnyan.aqua.sega.general.model.Card; import icu.samnyan.aqua.sega.util.jackson.AccessCodeSerializer; @@ -124,7 +125,7 @@ import java.util.List; "rankUpChallengeResults", "isNetBattleHost", "netBattleEndState" }) -public class UserData implements Serializable { +public class UserData implements Serializable, IGenericUserData { private static final long serialVersionUID = 1L; @@ -344,4 +345,13 @@ public class UserData implements Serializable { @Transient private UserEmoney userEmoney; + @Override + public int getIconId() { + return characterId; + } + + @Override + public long getTotalScore() { + return totalHiScore; + } } diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserPlaylog.java b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserPlaylog.java index 2aaa1ee9..d2b6ac1c 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserPlaylog.java +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserPlaylog.java @@ -2,10 +2,12 @@ package icu.samnyan.aqua.sega.chusan.model.userdata; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; +import icu.samnyan.aqua.net.utils.IGenericGamePlaylog; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.jetbrains.annotations.NotNull; import java.io.Serializable; import java.time.LocalDateTime; @@ -18,7 +20,7 @@ import java.time.LocalDateTime; @Data @NoArgsConstructor @AllArgsConstructor -public class UserPlaylog implements Serializable { +public class UserPlaylog implements Serializable, IGenericGamePlaylog { private static final long serialVersionUID = 1L; @@ -148,4 +150,25 @@ public class UserPlaylog implements Serializable { public UserPlaylog(UserData userData) { user = userData; } + + @Override + public int getAchievement() { + return score; + } + + @Override + public int getTotalCombo() { + return maxCombo; + } + + @Override + public int getAfterRating() { + return playerRating; + } + + @NotNull + @Override + public String getDate() { + return playDate.toString(); + } } diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/service/UserDataService.java b/src/main/java/icu/samnyan/aqua/sega/chusan/service/UserDataService.java index 038c8b12..e946f5be 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/service/UserDataService.java +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/service/UserDataService.java @@ -35,7 +35,7 @@ public class UserDataService { } public Optional getUserByCard(Card card) { - return userDataRepository.findByCard(card); + return Optional.ofNullable(userDataRepository.findByCard(card)); } public void updateLoginTime(UserData userData) {