diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserPlaylogRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserPlaylogRepository.java index 3317bba7..10acfacd 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserPlaylogRepository.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserPlaylogRepository.java @@ -1,9 +1,11 @@ package icu.samnyan.aqua.sega.chunithm.dao.userdata; +import icu.samnyan.aqua.sega.chunithm.model.response.data.GameRanking; import icu.samnyan.aqua.sega.chunithm.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.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import java.util.List; @@ -20,4 +22,7 @@ public interface UserPlaylogRepository extends JpaRepository List findByUser_Card_ExtIdAndMusicIdAndLevel(Long extId, int musicId, int level); List findByUser_Card_ExtId(Long extId); + + @Query("SELECT NEW icu.samnyan.aqua.sega.chunithm.model.response.data.GameRanking(c.musicId, COUNT(c.musicId)) FROM ChuniUserPlaylog c WHERE NOT c.level = 4 GROUP BY c.musicId ORDER BY COUNT(c.musicId) DESC") + Page findGameRankingByPlaylog(Pageable page); } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameRankingHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameRankingHandler.java index a58747c7..f55f5528 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameRankingHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetGameRankingHandler.java @@ -1,16 +1,19 @@ package icu.samnyan.aqua.sega.chunithm.handler.impl; import com.fasterxml.jackson.core.JsonProcessingException; + +import icu.samnyan.aqua.sega.chunithm.dao.userdata.UserPlaylogRepository; import icu.samnyan.aqua.sega.chunithm.handler.BaseHandler; +import icu.samnyan.aqua.sega.chunithm.model.response.data.GameRanking; import icu.samnyan.aqua.sega.util.jackson.StringMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Component; -import java.util.ArrayList; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; /** @@ -21,10 +24,13 @@ public class GetGameRankingHandler implements BaseHandler { private static final Logger logger = LoggerFactory.getLogger(GetGameRankingHandler.class); + private final UserPlaylogRepository userPlaylogRepository; + private final StringMapper mapper; @Autowired - public GetGameRankingHandler(StringMapper mapper) { + public GetGameRankingHandler(StringMapper mapper, UserPlaylogRepository userPlaylogRepository) { + this.userPlaylogRepository = userPlaylogRepository; this.mapper = mapper; } @@ -32,12 +38,12 @@ public class GetGameRankingHandler implements BaseHandler { public String handle(Map request) throws JsonProcessingException { String type = (String) request.get("type"); - List gameRankingList = new ArrayList<>(); + Page rankingPage = userPlaylogRepository.findGameRankingByPlaylog(PageRequest.of(0, 10)); Map resultMap = new LinkedHashMap<>(); resultMap.put("type", type); - resultMap.put("length", 0); - resultMap.put("gameRankingList", gameRankingList); + resultMap.put("length", 10); + resultMap.put("gameRankingList", rankingPage.getContent()); String json = mapper.write(resultMap); logger.info("Response: " + json); diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/GameRanking.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/GameRanking.java index 45d7a229..30fda0a3 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/GameRanking.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/response/data/GameRanking.java @@ -11,6 +11,6 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor public class GameRanking { - private long id; + private int id; private long point; }