[AB-xxx] adding feature to focus on a particular user in both leaderboard command and leaderboard UI

adding button to view the specified user on loaderboard at the rank command
This commit is contained in:
Sheldan
2024-11-26 23:17:24 +01:00
parent 3d915b96e7
commit b88ae377b1
19 changed files with 345 additions and 152 deletions

View File

@@ -12,12 +12,19 @@ import lombok.Setter;
@Setter
@Builder
public class LeaderBoardEntry {
/**
* Object representing the current experience status of a user in a guild.
*/
private AUserExperience experience;
/**
* The rank this user has in the respective guild.
*/
private Long userId;
private Integer level;
private Long experience;
private Long messageCount;
private Integer rank;
public static LeaderBoardEntry fromAUserExperience(AUserExperience aUserExperience) {
return LeaderBoardEntry
.builder()
.experience(aUserExperience.getExperience())
.userId(aUserExperience.getUser().getUserReference().getId())
.messageCount(aUserExperience.getMessageCount())
.level(aUserExperience.getLevelOrDefault())
.build();
}
}

View File

@@ -7,11 +7,8 @@ public interface LeaderBoardEntryResult {
Long getId();
/**
* The {@link dev.sheldan.abstracto.core.models.database.AUserInAServer} id of the user
* @return The ID of the user in a server
*/
Long getUserInServerId();
Long getUserId();
Long getRoleId();
/**
* The experience of the {@link dev.sheldan.abstracto.core.models.database.AUserInAServer}

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.experience.model.template;
import dev.sheldan.abstracto.core.models.context.SlimUserInitiatedServerContext;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
@@ -25,4 +26,9 @@ public class LeaderBoardModel extends SlimUserInitiatedServerContext {
*/
private LeaderBoardEntryModel userExecuting;
private String leaderboardUrl;
/**
* Whether to show the users own placement
*/
@Builder.Default
private boolean showPlacement = true;
}

View File

@@ -47,4 +47,5 @@ public class RankModel {
* The member to show the rank for
*/
private Member member;
private String leaderboardUrl;
}

View File

@@ -54,6 +54,7 @@ public interface AUserExperienceService {
* from the desired page
*/
LeaderBoard findLeaderBoardData(AServer server, Integer page);
LeaderBoard findLeaderBoardDataForUserFocus(AUserInAServer aUserInAServer);
/**
* Retrieves the {@link LeaderBoardEntry} from a specific {@link AUserInAServer} containing information about the

View File

@@ -62,6 +62,7 @@ public interface UserExperienceManagementService {
* @return A list desc ordered by {@link AUserExperience} experience only containing the elements between {@code start} and @{code end}
*/
List<AUserExperience> findLeaderBoardUsersPaginated(AServer server, Integer page, Integer size);
List<LeaderBoardEntryResult> getWindowedLeaderboardEntriesForUser(AUserInAServer aUserInAServer, Integer windowSize);
/**
* Returns the {@link LeaderBoardEntryResult} of the given {@link AUserExperience}.