From ce3cb6c13780df7b1d006c2ae56e813bc1854740 Mon Sep 17 00:00:00 2001 From: Kalle <38327916+Sendouc@users.noreply.github.com> Date: Mon, 11 Nov 2024 21:59:25 +0200 Subject: [PATCH] Ignore teams from leaderboard --- .../LeaderboardRepository.server.ts | 28 ++++++++++++++++++- .../leaderboards/leaderboards-constants.ts | 7 +++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/app/features/leaderboards/LeaderboardRepository.server.ts b/app/features/leaderboards/LeaderboardRepository.server.ts index 187d1a2e2..dd214cb8b 100644 --- a/app/features/leaderboards/LeaderboardRepository.server.ts +++ b/app/features/leaderboards/LeaderboardRepository.server.ts @@ -5,6 +5,7 @@ import { COMMON_USER_FIELDS } from "~/utils/kysely.server"; import { ordinalToSp } from "../mmr/mmr-utils"; import { DEFAULT_LEADERBOARD_MAX_SIZE, + IGNORED_TEAMS, MATCHES_COUNT_NEEDED_FOR_LEADERBOARD, } from "./leaderboards-constants"; @@ -91,7 +92,11 @@ export async function teamLeaderboardBySeason({ ? filterOneEntryPerUser(entries) : entries; const withSharedTeam = resolveSharedTeam(oneEntryPerUser); - const withPower = addPowers(withSharedTeam); + const withIgnoredHandled = onlyOneEntryPerUser + ? ignoreTeams({ season, entries: withSharedTeam }) + : withSharedTeam; + const withPower = addPowers(withIgnoredHandled); + return addPlacementRank(withPower); } @@ -123,3 +128,24 @@ function resolveSharedTeam(entries: ReturnType) { }; }); } + +function ignoreTeams({ + season, + entries, +}: { season: number; entries: ReturnType }) { + const ignoredTeams = IGNORED_TEAMS.get(season); + + if (!ignoredTeams) return entries; + + return entries.filter((entry) => { + if ( + ignoredTeams.some((team) => + team.every((userId) => entry.members.some((m) => m.id === userId)), + ) + ) { + return false; + } + + return true; + }); +} diff --git a/app/features/leaderboards/leaderboards-constants.ts b/app/features/leaderboards/leaderboards-constants.ts index 56842021e..f6038d653 100644 --- a/app/features/leaderboards/leaderboards-constants.ts +++ b/app/features/leaderboards/leaderboards-constants.ts @@ -20,3 +20,10 @@ export const LEADERBOARD_TYPES = [ (id) => `XP-WEAPON-${id}`, ) as `XP-WEAPON-${(typeof mainWeaponIds)[number]}`[]), ] as const; + +/** Teams that are ignored from the main leaderboard, because e.g. they want to qualify with another group. + * Map key is season. + */ +export const IGNORED_TEAMS: Map = new Map().set(5, [ + [9403, 13562, 15916, 38062], // Snooze +]);