diff --git a/src/main/java/net/discordjug/javabot/api/routes/leaderboard/help_experience/HelpExperienceLeaderboardController.java b/src/main/java/net/discordjug/javabot/api/routes/leaderboard/help_experience/HelpExperienceLeaderboardController.java index 6c040b49a..a7c5390ba 100644 --- a/src/main/java/net/discordjug/javabot/api/routes/leaderboard/help_experience/HelpExperienceLeaderboardController.java +++ b/src/main/java/net/discordjug/javabot/api/routes/leaderboard/help_experience/HelpExperienceLeaderboardController.java @@ -6,6 +6,7 @@ import net.discordjug.javabot.api.routes.CaffeineCache; import net.discordjug.javabot.api.routes.leaderboard.help_experience.model.ExperienceUserData; import net.discordjug.javabot.systems.help.HelpExperienceService; +import net.discordjug.javabot.systems.help.model.HelpAccount; import net.discordjug.javabot.util.Pair; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.entities.Guild; @@ -18,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -26,7 +28,7 @@ */ @RestController public class HelpExperienceLeaderboardController extends CaffeineCache, List> { - private static final int PAGE_AMOUNT = 8; + private static final int PAGE_AMOUNT = 10; private final JDA jda; private final HelpExperienceService helpExperienceService; @@ -65,9 +67,13 @@ public ResponseEntity> getHelpExperienceLeaderboard( } List members = getCache().getIfPresent(new Pair<>(guild.getIdLong(), page)); if (members == null || members.isEmpty()) { - members = helpExperienceService.getTopAccounts(PAGE_AMOUNT, page).stream() - .map(p -> ExperienceUserData.of(p, jda.retrieveUserById(p.getUserId()).complete())) - .toList(); + List topAccounts = helpExperienceService.getTopAccounts(PAGE_AMOUNT, page); + members = new ArrayList<>(topAccounts.size()); + for (int i = 0; i < topAccounts.size(); i++) { + HelpAccount acc = topAccounts.get(i); + int rank = (page - 1) * PAGE_AMOUNT + 1 + i; + members.add(ExperienceUserData.of(acc, jda.retrieveUserById(acc.getUserId()).complete(), rank)); + } getCache().put(new Pair<>(guild.getIdLong(), page), members); } return new ResponseEntity<>(members, HttpStatus.OK); diff --git a/src/main/java/net/discordjug/javabot/api/routes/leaderboard/help_experience/model/ExperienceUserData.java b/src/main/java/net/discordjug/javabot/api/routes/leaderboard/help_experience/model/ExperienceUserData.java index 56a246dcf..14117b5ea 100644 --- a/src/main/java/net/discordjug/javabot/api/routes/leaderboard/help_experience/model/ExperienceUserData.java +++ b/src/main/java/net/discordjug/javabot/api/routes/leaderboard/help_experience/model/ExperienceUserData.java @@ -17,15 +17,17 @@ @EqualsAndHashCode(callSuper = false) public class ExperienceUserData extends UserData { private HelpAccount account; + private int rank; /** * Creates a new {@link ExperienceUserData} instance. * * @param account The {@link HelpAccount} to use. * @param user A nullable {@link User}. + * @param rank The position of the user in the help leaderboard. * @return The {@link ExperienceUserData}. */ - public static @NotNull ExperienceUserData of(@NotNull HelpAccount account, @Nullable User user) { + public static @NotNull ExperienceUserData of(@NotNull HelpAccount account, @Nullable User user, int rank) { ExperienceUserData data = new ExperienceUserData(); data.setUserId(account.getUserId()); if (user != null) { @@ -34,6 +36,7 @@ public class ExperienceUserData extends UserData { data.setEffectiveAvatarUrl(user.getEffectiveAvatarUrl()); } data.setAccount(account); + data.setRank(rank); return data; } }