regionals #5

Merged
kyle merged 18 commits from development into main 2026-03-01 21:23:54 -06:00
Showing only changes of commit c7487e37f2 - Show all commits

View File

@@ -436,10 +436,64 @@ async function calculateGroupStandings(groupId: string): Promise<GroupStanding[]
standing.cup_differential = standing.cups_for - standing.cups_against; standing.cup_differential = standing.cups_for - standing.cups_against;
} }
const h2hRecords = new Map<string, Map<string, { wins: number; cupDiff: number }>>();
for (const match of completedMatches) {
if (!match.home || !match.away) continue;
if (!h2hRecords.has(match.home.id)) {
h2hRecords.set(match.home.id, new Map());
}
if (!h2hRecords.has(match.away.id)) {
h2hRecords.set(match.away.id, new Map());
}
const homeH2H = h2hRecords.get(match.home.id)!;
const awayH2H = h2hRecords.get(match.away.id)!;
if (!homeH2H.has(match.away.id)) {
homeH2H.set(match.away.id, { wins: 0, cupDiff: 0 });
}
if (!awayH2H.has(match.home.id)) {
awayH2H.set(match.home.id, { wins: 0, cupDiff: 0 });
}
const homeRecord = homeH2H.get(match.away.id)!;
const awayRecord = awayH2H.get(match.home.id)!;
const cupDiff = match.home_cups - match.away_cups;
homeRecord.cupDiff += cupDiff;
awayRecord.cupDiff -= cupDiff;
if (match.home_cups > match.away_cups) {
homeRecord.wins++;
} else {
awayRecord.wins++;
}
}
const sortedStandings = Array.from(standings.values()).sort((a, b) => { const sortedStandings = Array.from(standings.values()).sort((a, b) => {
if (b.wins !== a.wins) return b.wins - a.wins; if (b.wins !== a.wins) return b.wins - a.wins;
if (b.cup_differential !== a.cup_differential) return b.cup_differential - a.cup_differential; if (b.cup_differential !== a.cup_differential) return b.cup_differential - a.cup_differential;
return b.cups_for - a.cups_for;
if (b.cups_for !== a.cups_for) return b.cups_for - a.cups_for;
const aH2H = h2hRecords.get(a.team.id);
const bH2H = h2hRecords.get(b.team.id);
if (aH2H && bH2H) {
const aVsB = aH2H.get(b.team.id);
const bVsA = bH2H.get(a.team.id);
if (aVsB && bVsA) {
if (aVsB.wins !== bVsA.wins) return bVsA.wins - aVsB.wins;
if (aVsB.cupDiff !== -bVsA.cupDiff) return aVsB.cupDiff - (-bVsA.cupDiff);
}
}
return a.team.id.localeCompare(b.team.id);
}); });
sortedStandings.forEach((standing, index) => { sortedStandings.forEach((standing, index) => {