diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserEventPointRepository.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserEventPointRepository.java index 69669186..c7571718 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserEventPointRepository.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserEventPointRepository.java @@ -3,6 +3,7 @@ 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.UserEventPoint; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; @@ -21,4 +22,7 @@ public interface UserEventPointRepository extends JpaRepository request) throws JsonProcessingException { long userId = ((Number) request.get("userId")).longValue(); - String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.0")); - // TODO: query ranking from database List eventPointList = userEventPointRepository.findByUser_Card_ExtId(userId); List rankingItemList = new LinkedList<>(); eventPointList.forEach(x -> rankingItemList.add(new UserEventRankingItem( x.getEventId(), 1, // Type 1 is latest ranking time, - 1, + userEventPointRepository.calculateRankByUserAndEventId(x.getUser().getId(), x.getEventId()), x.getPoint() ))); diff --git a/src/test/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/OngekiRepositoryTest.java b/src/test/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/OngekiRepositoryTest.java index ece9e15f..22689f13 100644 --- a/src/test/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/OngekiRepositoryTest.java +++ b/src/test/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/OngekiRepositoryTest.java @@ -12,6 +12,7 @@ import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import java.util.List; import static icu.samnyan.aqua.util.CardHelper.getCard; +import static icu.samnyan.aqua.util.CardHelper.getRandomCard; import static org.assertj.core.api.Assertions.assertThat; /** @@ -175,6 +176,26 @@ class OngekiRepositoryTest { assertThat(aL).hasSize(2); } + @Test + void userEventPoint_Rank() { + var u1 = getNewRandomValidUser(); + var u2 = getNewRandomValidUser(); + var u3 = getNewRandomValidUser(); + + final var eventId = 2857; + + userEventPointRepository.saveAll(List.of( + getEventPoint(u1, eventId, 500), + getEventPoint(u2, eventId, 600), + getEventPoint(u3, eventId, 2857) + )); + + var eventPointData = userEventPointRepository.findByUser_Card_ExtId(u1.getCard().getExtId()).get(0); + + var rank = userEventPointRepository.calculateRankByUserAndEventId(eventPointData.getUser().getId(), eventPointData.getEventId()); + assertThat(rank).isEqualTo(3); + } + @Test void userGeneralData_SaveLoad() { var c = cardRepository.save(getCard()); @@ -402,7 +423,11 @@ class OngekiRepositoryTest { } private UserEventPoint getEventPoint(UserData u, Integer eventId) { - return new UserEventPoint(-1, u, eventId, 1, false); + return getEventPoint(u, eventId, 1); + } + + private UserEventPoint getEventPoint(UserData u, Integer eventId, Integer point) { + return new UserEventPoint(-1, u, eventId, point, false); } private UserGeneralData getGeneralData(UserData u, String key, String value) {