Point 38 - HOTFIX: Age Conversion Logic Korrektur¶
Problem bei erstem Test¶
User testete mit echtem XML:
Erwartet: Altersbereich 18-100 Jahre
Angezeigt: 6-18 Jahre (falsch!)
Root Cause der falschen Konvertierung¶
Falsche Annahme in erster Implementierung:¶
// FALSCH:
birthYearFrom = eventYear - competition.ageInfo.min; // 2025 - 18 = 2007
birthYearTo = eventYear - competition.ageInfo.max; // 2025 - 100 = 1925
Problem: Ich hatte yer_von und yer_bis falsch interpretiert!
Korrekte Interpretation der Felder:¶
Aus competitions.ts Zeile 122:
ageFrom: Math.min(ageFrom, ageTo), // Kleinere Zahl = jüngeres Alter
ageTo: Math.max(ageFrom, ageTo), // Größere Zahl = älteres Alter
Bedeutung der XML-Felder:
- waAlterMin="18" = Mindestalter (jüngster Teilnehmer)
- waAlterMax="100" = Höchstalter (ältester Teilnehmer)
Bedeutung der DB-Felder:
- yer_von = Birth year FROM = Geburtsjahr des jüngsten Alters
- yer_bis = Birth year TO = Geburtsjahr des ältesten Alters
Korrekte Zuordnung für Age 18-100:
- Mindestalter 18 → Geboren 2007 (2025 - 18) → yer_von = 2007
- Höchstalter 100 → Geboren 1925 (2025 - 100) → yer_bis = 1925
Korrekturen in der Implementierung¶
1. Konvertierung korrigiert¶
// KORREKT:
if (competition.ageInfo?.min && competition.ageInfo.min > 0) {
birthYearFrom = eventYear - competition.ageInfo.min; // Youngest (min age)
}
if (competition.ageInfo?.max && competition.ageInfo.max > 0 && competition.ageInfo.max < 999) {
birthYearTo = eventYear - competition.ageInfo.max; // Oldest (max age)
}
Zusätzlich: Check für max < 999 hinzugefügt (falls XML "unbegrenzt" mit 999 kodiert)
2. Default-Fallbacks korrigiert¶
// OLD (FALSCH):
birthYearFrom = eventYear - 18; // Max age: 18
birthYearTo = eventYear - 6; // Min age: 6
// NEW (KORREKT):
birthYearFrom = eventYear - 6; // Youngest: age 6
birthYearTo = eventYear - 18; // Oldest: age 18
3. Partial Age Info Fallbacks korrigiert¶
// Only max age specified
if (!birthYearFrom && birthYearTo) {
birthYearFrom = eventYear - 6; // Assume youngest is 6
}
// Only min age specified
if (birthYearFrom && !birthYearTo) {
birthYearTo = eventYear - 99; // Assume oldest is 99
}
Test-Szenarien (korrigiert)¶
Test Case: Ages 18-100 (aus User XML)¶
Event Year: 2025
waAlterMin: 18
waAlterMax: 100
Berechnung:
birthYearFrom = 2025 - 18 = 2007 (jüngster mit 18)
birthYearTo = 2025 - 100 = 1925 (ältester mit 100)
DB Speicherung:
yer_von = 2007
yer_bis = 1925
Display (competitions.ts):
ageFrom = 2025 - 2007 = 18 ✅
ageTo = 2025 - 1925 = 100 ✅
Test Case: Ages 11-12 (normaler Fall)¶
Event Year: 2025
waAlterMin: 11
waAlterMax: 12
Berechnung:
birthYearFrom = 2025 - 11 = 2014 (jüngster mit 11)
birthYearTo = 2025 - 12 = 2013 (ältester mit 12)
DB Speicherung:
yer_von = 2014
yer_bis = 2013
Display:
ageFrom = 2025 - 2014 = 11 ✅
ageTo = 2025 - 2013 = 12 ✅
Warum es vorher 6-18 anzeigte¶
Die alte Implementierung hat: 1. Ages 18-100 aus XML gelesen 2. Falsch herum konvertiert: birthYearFrom=2007, birthYearTo=1925 3. In DB gespeichert: yer_von=2007, yer_bis=1925 4. Display-Code hat dann berechnet: - ageFrom = 2025 - 2007 = 18 - ageTo = 2025 - 1925 = 100 - ABER: Math.min(18, 100) = 18, Math.max(18, 100) = 100 ✅
Moment... das hätte eigentlich funktionieren sollen!
Lass mich nochmal genauer schauen...
WAIT! Analyse des Display-Codes¶
Aus competitions.ts Zeile 106-111:
const birthYearFrom = comp.yer_von;
const birthYearTo = comp.yer_bis;
const ageFrom = birthYearFrom ? eventYear - birthYearFrom : 6;
const ageTo = birthYearTo ? eventYear - birthYearTo : (...) : 18;
AH! Hier ist das Problem!
Wenn birthYearFrom oder birthYearTo NULL oder 0 ist, werden die Defaults 6 und 18 verwendet!
Mögliche Ursachen warum 6-18 angezeigt wurde:
1. Die Ages wurden nicht korrekt extrahiert aus dem XML
2. Die competition.ageInfo war leer
3. Die Konvertierung hat NULL/0 gespeichert
4. Display-Code hat dann Fallback 6-18 verwendet
Server-Logs prüfen¶
Bitte schau dir beim nächsten Import die Server-Console an! Es sollte jetzt ausgeben:
🔍 Processing: Gerätvierkampf w
- Event year: 2025
- Ages from XML: 18 - 100
- Birth years (DB): 2007 - 1925
- Display ages: 18 - 100
- Gender: weiblich
Wenn dort steht Ages from XML: none - none, dann wurde das XML nicht korrekt geparst!
Nächste Schritte¶
- Server neu starten (node process killen oder
npm run devneu starten) - Import erneut durchführen mit deinem XML
- Console Logs prüfen - sehen was extrahiert wird
- Competitions-Page prüfen - sollte jetzt 18-100 anzeigen
Falls es immer noch 6-18 anzeigt: - Logs zeigen, ob Ages korrekt aus XML extrahiert werden - Ggf. ist das XML-Parsing das Problem (nicht die Konvertierung)