mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-08 20:12:23 +00:00
fixed rank delivery in case of filtered competitors due to lack of permissions
Change-Id: Ie87b1759db9bf2354a6d4453f4895f5341c67bb0
This commit is contained in:
1 parent
89e8bef9c8
commit
6c5aee84f3
1 file changed
+7
-5
+7
-5
@@ -64,7 +64,6 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource {
|
||||
@QueryParam("maxCompetitorsCount") Integer maxCompetitorsCount,
|
||||
@QueryParam("secret") String regattaSecret) {
|
||||
ShardingContext.setShardingConstraint(ShardingType.LEADERBOARDNAME, leaderboardName);
|
||||
|
||||
try {
|
||||
Response response;
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
|
||||
@@ -133,7 +132,7 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource {
|
||||
filteredCompetitorsFromBestToWorst.add(competitor);
|
||||
}
|
||||
});
|
||||
for (CompetitorDTO competitor: filteredCompetitorsFromBestToWorst) {
|
||||
for (CompetitorDTO competitor : filteredCompetitorsFromBestToWorst) {
|
||||
LeaderboardRowDTO row = leaderboardDTO.rows.get(competitor);
|
||||
LeaderboardEntryDTO leaderboardEntry = row.fieldsByRaceColumnName.get(raceColumnName);
|
||||
FleetDTO fleetOfCompetitor = leaderboardEntry.fleet;
|
||||
@@ -151,10 +150,12 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource {
|
||||
JSONArray jsonCompetitorEntries = new JSONArray();
|
||||
jsonLeaderboard.put("competitors", jsonCompetitorEntries);
|
||||
jsonLeaderboard.put("ShardingLeaderboardName", ShardingType.LEADERBOARDNAME.encodeIfNeeded(leaderboard.getName()));
|
||||
int competitorCounter = 1;
|
||||
final int[] regattaRankCounter = new int[] { 1 };
|
||||
// Remark: leaderboardDTO.competitors are ordered by total rank
|
||||
List<CompetitorDTO> filteredCompetitors = new ArrayList<>();
|
||||
final Map<CompetitorDTO, Integer> ranks = new HashMap<>(); // holds ranks, regardless of permission-based filtering
|
||||
leaderboardDTO.competitors.forEach(competitor -> {
|
||||
ranks.put(competitor, regattaRankCounter[0]++);
|
||||
if (SecurityUtils.getSubject()
|
||||
.isPermitted(competitor.getIdentifier()
|
||||
.getStringPermission(SecuredSecurityTypes.PublicReadableActions.READ_PUBLIC))
|
||||
@@ -163,9 +164,10 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource {
|
||||
filteredCompetitors.add(competitor);
|
||||
}
|
||||
});
|
||||
int competitorCounter = 0;
|
||||
for (CompetitorDTO competitor : filteredCompetitors) {
|
||||
LeaderboardRowDTO leaderboardRowDTO = leaderboardDTO.rows.get(competitor);
|
||||
if (maxCompetitorsCount != null && competitorCounter > maxCompetitorsCount) {
|
||||
if (maxCompetitorsCount != null && competitorCounter >= maxCompetitorsCount) {
|
||||
break;
|
||||
}
|
||||
JSONObject jsonCompetitor = new JSONObject();
|
||||
@@ -176,7 +178,7 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource {
|
||||
writeBoatData(jsonBoat, rowBoatDTO);
|
||||
jsonCompetitor.put("boat", jsonBoat);
|
||||
}
|
||||
jsonCompetitor.put("rank", competitorCounter);
|
||||
jsonCompetitor.put("rank", ranks.get(competitor));
|
||||
jsonCompetitor.put("carriedPoints", leaderboardRowDTO.carriedPoints);
|
||||
jsonCompetitor.put("netPoints", leaderboardRowDTO.netPoints);
|
||||
jsonCompetitor.put("overallRank", leaderboardDTO.getTotalRank(competitor));
|
||||
|
||||
Reference in new issue
Block a user