diff --git a/backend/services/internalTournamentStatsService.js b/backend/services/internalTournamentStatsService.js index d79973ff..bd1cad51 100644 --- a/backend/services/internalTournamentStatsService.js +++ b/backend/services/internalTournamentStatsService.js @@ -1,3 +1,5 @@ +import { memberToCanonicalTtBucket } from '../utils/ttInternalStatsBuckets.js'; + /** * Statistik-Werte für interne Einzel-Turniere (Gruppenphase + K.-o.-Runde). * @@ -6,6 +8,7 @@ * bei N = 1: 100 %. Nur Vereinsmitglieder werden gewertet; N zählt alle Platzierten. * K.-o.: Wer die K.-o.-Runde erreicht: höchster Gruppen-Prozentwert dieser Klasse + 1, * danach +1 pro gewonnenes K.-o.-Spiel (wie bisher, jetzt auf %-Skala). + * Alters-/Geschlechtsfilter: pro Spieler aus Vereinsmitglied Geburtsdatum + Geschlecht (nicht aus Turnierklassen-Name). */ export function parseWinnerFromMatch(match) { @@ -81,35 +84,6 @@ export function groupPercentFromRankings(rankings, nInGroup) { return map; } -/** Schlüssel für Gruppen/Spiele ohne zugeordnete Klasse (classId null) */ -export const NO_CLASS_AGE_KEY = 'ak|__noclass__'; - -/** - * Stabiler Filter-Schlüssel aus einer Einzel-Klasse (Geburtsjahre + Geschlecht). - * @param {object} classRow – TournamentClass-Plain - * @returns {string|null} null bei Doppel - */ -export function ageClassFilterKey(classRow) { - if (!classRow || classRow.isDoubles) return null; - const min = classRow.minBirthYear ?? classRow.min_birth_year ?? null; - const max = classRow.maxBirthYear ?? classRow.max_birth_year ?? null; - const g = classRow.gender ?? ''; - return `ak|${min ?? ''}|${max ?? ''}|${g}`; -} - -/** - * @param {number|null|undefined} classIdNum - * @param {Array
{{ $t('tournaments.internalStatsPointsExplain') }}
-