Refactor error handling in MyTischtennisUrlController and improve memberService indexing
Refactored error handling in MyTischtennisUrlController to standardize error messages and ensure consistent status codes. Enhanced memberService by implementing a more efficient indexing system for member data retrieval, improving performance and accuracy in TTR and QTTR updates. Updated TeamManagementView to handle timeout errors and provide detailed user feedback, enhancing overall user experience.
This commit is contained in:
@@ -264,26 +264,33 @@ class MemberService {
|
||||
const notFound = [];
|
||||
const matched = [];
|
||||
|
||||
// Maps für schnelleres Matching
|
||||
const mapByName = (entries) => {
|
||||
const m = new Map();
|
||||
// Indizes für schnelleres Matching (nach personId und Name)
|
||||
const createIndex = (entries) => {
|
||||
const byName = new Map();
|
||||
const byPersonId = new Map();
|
||||
for (const e of (entries || [])) {
|
||||
const key = `${(e.firstname||'').toLowerCase()}|${(e.lastname||'').toLowerCase()}`;
|
||||
if (!m.has(key)) m.set(key, e);
|
||||
const key = `${(e.firstname||'').toLowerCase().trim()}|${(e.lastname||'').toLowerCase().trim()}`;
|
||||
if (!byName.has(key)) byName.set(key, e);
|
||||
if (e.personId && !byPersonId.has(String(e.personId))) {
|
||||
byPersonId.set(String(e.personId), e);
|
||||
}
|
||||
}
|
||||
return m;
|
||||
return { byName, byPersonId };
|
||||
};
|
||||
|
||||
const currentMap = mapByName(rankingsCurrent.entries);
|
||||
const quarterMap = rankingsQuarter.success ? mapByName(rankingsQuarter.entries) : new Map();
|
||||
const currentIdx = createIndex(rankingsCurrent.entries);
|
||||
const quarterIdx = rankingsQuarter.success ? createIndex(rankingsQuarter.entries) : { byName: new Map(), byPersonId: new Map() };
|
||||
|
||||
// 4. Für jedes Mitglied TTR und QTTR aktualisieren
|
||||
let updatedTtr = 0;
|
||||
let updatedQttr = 0;
|
||||
for (const member of members) {
|
||||
const firstName = member.firstName;
|
||||
const lastName = member.lastName;
|
||||
const key = `${(firstName||'').toLowerCase()}|${(lastName||'').toLowerCase()}`;
|
||||
const rankingEntry = currentMap.get(key);
|
||||
const rankingQuarterEntry = quarterMap.get(key);
|
||||
const key = `${(firstName||'').toLowerCase().trim()}|${(lastName||'').toLowerCase().trim()}`;
|
||||
const personId = member.myTischtennisPlayerId ? String(member.myTischtennisPlayerId).trim() : null;
|
||||
const rankingEntry = personId ? (currentIdx.byPersonId.get(personId) || currentIdx.byName.get(key)) : currentIdx.byName.get(key);
|
||||
const rankingQuarterEntry = personId ? (quarterIdx.byPersonId.get(personId) || quarterIdx.byName.get(key)) : quarterIdx.byName.get(key);
|
||||
|
||||
if (rankingEntry || rankingQuarterEntry) {
|
||||
try {
|
||||
@@ -291,9 +298,18 @@ class MemberService {
|
||||
const oldQttr = member.qttr;
|
||||
if (rankingEntry && typeof rankingEntry.fedRank === 'number') {
|
||||
member.ttr = rankingEntry.fedRank;
|
||||
if (member.ttr !== oldTtr) updatedTtr++;
|
||||
}
|
||||
if (rankingQuarterEntry && typeof rankingQuarterEntry.fedRank === 'number') {
|
||||
member.qttr = rankingQuarterEntry.fedRank;
|
||||
if (member.qttr !== oldQttr) updatedQttr++;
|
||||
} else if (!rankingsQuarter.success && (member.qttr == null)) {
|
||||
// Fallback: wenn QTTR-Abruf fehlgeschlagen ist und kein Wert vorhanden war,
|
||||
// setze QTTR ersatzweise auf aktuellen TTR, damit die Anzeige nicht leer bleibt
|
||||
if (member.ttr != null) {
|
||||
member.qttr = member.ttr;
|
||||
if (member.qttr !== oldQttr) updatedQttr++;
|
||||
}
|
||||
}
|
||||
await member.save();
|
||||
updated++;
|
||||
@@ -318,7 +334,7 @@ class MemberService {
|
||||
|
||||
devLog(`Updated: ${updated}, Not found: ${notFound.length}, Errors: ${errors.length}`);
|
||||
|
||||
let message = `${updated} Mitglied(er) aktualisiert.`;
|
||||
let message = `${updated} Mitglied(er) aktualisiert. (TTR: ${updatedTtr}, QTTR: ${updatedQttr})`;
|
||||
if (notFound.length > 0) {
|
||||
message += ` ${notFound.length} nicht in myTischtennis-Rangliste gefunden.`;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user