From 0f37346fdc4181125b29fa6129d59825bea7ce5e Mon Sep 17 00:00:00 2001 From: samnyan <205-NeumPhis@users.noreply.dev.s-ul.eu> Date: Tue, 21 Jan 2020 20:52:04 +0800 Subject: [PATCH] [DIVA] Fix ranking being reversed --- .../diva/ApiDivaPlayerDataController.java | 64 ++++++++++++++++++- .../model/resp/sega/diva/PvRankRecord.java | 16 +++++ .../userdata/PlayerPvRecordRepository.java | 4 +- .../handler/databank/PsRankingHandler.java | 2 +- .../diva/model/userdata/PlayerProfile.java | 1 + 5 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 src/main/java/icu/samnyan/aqua/api/model/resp/sega/diva/PvRankRecord.java diff --git a/src/main/java/icu/samnyan/aqua/api/controller/sega/diva/ApiDivaPlayerDataController.java b/src/main/java/icu/samnyan/aqua/api/controller/sega/diva/ApiDivaPlayerDataController.java index 85c7d495..eb66bc1d 100644 --- a/src/main/java/icu/samnyan/aqua/api/controller/sega/diva/ApiDivaPlayerDataController.java +++ b/src/main/java/icu/samnyan/aqua/api/controller/sega/diva/ApiDivaPlayerDataController.java @@ -1,16 +1,17 @@ package icu.samnyan.aqua.api.controller.sega.diva; import icu.samnyan.aqua.api.model.ReducedPageResponse; +import icu.samnyan.aqua.api.model.resp.sega.diva.PvRankRecord; import icu.samnyan.aqua.sega.diva.dao.userdata.*; +import icu.samnyan.aqua.sega.diva.model.common.Difficulty; +import icu.samnyan.aqua.sega.diva.model.common.Edition; import icu.samnyan.aqua.sega.diva.model.userdata.*; import icu.samnyan.aqua.sega.diva.service.PlayerProfileService; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.web.bind.annotation.*; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; +import java.util.*; /** * @author samnyan (privateamusement@protonmail.com) @@ -41,6 +42,23 @@ public class ApiDivaPlayerDataController { return playerProfileService.findByPdId(pdId); } + @GetMapping("playerInfo/rival") + public Map getRivalInfo(@RequestParam int pdId) { + int rId = playerProfileService.findByPdId(pdId).orElseThrow().getRivalPdId(); + Map result = new HashMap<>(); + if (rId == -1) { + result.put("rival", "Not Set"); + } else { + Optional profile = playerProfileService.findByPdId(rId); + if (profile.isPresent()) { + result.put("rival", profile.get().getPlayerName()); + } else { + result.put("rival", "Player Not Found"); + } + } + return result; + } + @PutMapping("playerInfo/playerName") public PlayerProfile updateName(@RequestBody Map request) { PlayerProfile profile = playerProfileService.findByPdId((Integer) request.get("pdId")).orElseThrow(); @@ -172,6 +190,46 @@ public class ApiDivaPlayerDataController { return playerPvCustomizeRepository.save(playerPvCustomize); } + @GetMapping("pvRecord/{pvId}/ranking/{difficulty}") + public ReducedPageResponse getPvRanking(@PathVariable int pvId, + @PathVariable String difficulty, + @RequestParam(required = false, defaultValue = "0") int page, + @RequestParam(required = false, defaultValue = "10") int size) { + Difficulty diff = null; + Edition edition = Edition.ORIGINAL; + switch (difficulty) { + case "EASY": + diff = Difficulty.EASY; + break; + case "NORMAL": + diff = Difficulty.NORMAL; + break; + case "HARD": + diff = Difficulty.HARD; + break; + case "EXTREME": + diff = Difficulty.EXTREME; + break; + case "EXTRA_EXTREME": { + diff = Difficulty.EXTREME; + edition = Edition.EXTRA; + break; + } + } + if(diff != null) { + Page pvRecords = playerPvRecordRepository.findByPvIdAndEditionAndDifficultyOrderByMaxScoreDesc(pvId, edition,diff, PageRequest.of(page, size)); + + List rankList = new LinkedList<>(); + + pvRecords.forEach(x ->{ + rankList.add(new PvRankRecord(x.getId(),x.getPdId().getPlayerName(),x.getMaxScore(),x.getMaxAttain())); + }); + + return new ReducedPageResponse<>(rankList, pvRecords.getPageable().getPageNumber(), pvRecords.getTotalPages(), pvRecords.getTotalElements()); + } + return null; + } + @GetMapping("module") public ReducedPageResponse getModules(@RequestParam int pdId, @RequestParam(required = false, defaultValue = "0") int page, diff --git a/src/main/java/icu/samnyan/aqua/api/model/resp/sega/diva/PvRankRecord.java b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/diva/PvRankRecord.java new file mode 100644 index 00000000..e5bb8796 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/diva/PvRankRecord.java @@ -0,0 +1,16 @@ +package icu.samnyan.aqua.api.model.resp.sega.diva; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * @author sam_nya (samnya@outlook.com) + */ +@Data +@AllArgsConstructor +public class PvRankRecord { + private long id; + private String playerName; + private int score; + private int attain; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerPvRecordRepository.java b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerPvRecordRepository.java index ed416bd6..5f3d0565 100644 --- a/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerPvRecordRepository.java +++ b/src/main/java/icu/samnyan/aqua/sega/diva/dao/userdata/PlayerPvRecordRepository.java @@ -39,7 +39,9 @@ public interface PlayerPvRecordRepository extends JpaRepository findByPdIdAndEdition(PlayerProfile profile, Edition edition); - List findTop3ByPvIdAndEditionAndDifficultyOrderByMaxScore(int pvId, Edition edition, Difficulty difficulty); + List findTop3ByPvIdAndEditionAndDifficultyOrderByMaxScoreDesc(int pvId, Edition edition, Difficulty difficulty); + + Page findByPvIdAndEditionAndDifficultyOrderByMaxScoreDesc(int pvId, Edition edition, Difficulty difficulty, Pageable page); Page findByPdId_PdIdOrderByPvId(int pdId, Pageable page); diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PsRankingHandler.java b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PsRankingHandler.java index 2ec9d02c..77df296c 100644 --- a/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PsRankingHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/diva/handler/databank/PsRankingHandler.java @@ -59,7 +59,7 @@ public class PsRankingHandler extends BaseHandler { for (int i : list) { - List records = playerPvRecordRepository.findTop3ByPvIdAndEditionAndDifficultyOrderByMaxScore(i, Edition.ORIGINAL, difficulty); + List records = playerPvRecordRepository.findTop3ByPvIdAndEditionAndDifficultyOrderByMaxScoreDesc(i, Edition.ORIGINAL, difficulty); resultCollections.put(i, new PsRankingCollection(i, edition, records)); } diff --git a/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerProfile.java b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerProfile.java index 48b5a860..d0260569 100644 --- a/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerProfile.java +++ b/src/main/java/icu/samnyan/aqua/sega/diva/model/userdata/PlayerProfile.java @@ -155,6 +155,7 @@ public class PlayerProfile implements Serializable { private String myList2 = getDummyString("-1", 40); + @JsonIgnore private int rivalPdId = -1; public PlayerProfile(int pdId, String playerName) {