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 +]);