From 65acc9e0d54b4ff535385790bf6ed03f9ebbd974 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Wed, 17 Dec 2025 08:50:05 +0100 Subject: [PATCH] feat(tournament): enhance validation of tournament members and external participants - Implemented logic to load and validate TournamentMember and ExternalTournamentParticipant IDs for matches. - Updated checks to set player1 and player2 to null if they belong to external participants or do not match valid tournament members. --- backend/services/tournamentService.js | 34 +++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/backend/services/tournamentService.js b/backend/services/tournamentService.js index 6faae16..a55edea 100644 --- a/backend/services/tournamentService.js +++ b/backend/services/tournamentService.js @@ -1726,13 +1726,39 @@ class TournamentService { return (a.id ?? 0) - (b.id ?? 0); }); - // WICHTIG: Prüfe, ob die geladenen TournamentMember tatsächlich zu diesem Turnier gehören - // Wenn nicht, setze sie auf null, damit sie als externe Teilnehmer geladen werden können + // WICHTIG: Lade alle gültigen TournamentMember-IDs und ExternalTournamentParticipant-IDs für dieses Turnier + // um zu prüfen, ob ein geladenes TournamentMember tatsächlich zu diesem Turnier gehört + const validTournamentMemberIds = new Set(); + const allTournamentMembers = await TournamentMember.findAll({ + where: { tournamentId }, + attributes: ['id'] + }); + allTournamentMembers.forEach(tm => validTournamentMemberIds.add(tm.id)); + + // Lade auch alle ExternalTournamentParticipant-IDs, um zu prüfen, ob eine ID zu einem externen Teilnehmer gehört + const validExternalParticipantIds = new Set(); + const allExternalParticipants = await ExternalTournamentParticipant.findAll({ + where: { tournamentId }, + attributes: ['id'] + }); + allExternalParticipants.forEach(ep => validExternalParticipantIds.add(ep.id)); + + // Prüfe für jedes Match, ob die player1Id/player2Id zu einem externen Teilnehmer gehört + // Wenn ja, setze das geladene TournamentMember auf null (auch wenn es zufällig geladen wurde) matches.forEach(match => { - if (match.player1 && match.player1.tournamentId !== tournamentId) { + if (match.player1Id && validExternalParticipantIds.has(match.player1Id)) { + // Diese ID gehört zu einem externen Teilnehmer, also sollte player1 null sein + match.player1 = null; + } else if (match.player1 && !validTournamentMemberIds.has(match.player1.id)) { + // Das geladene TournamentMember gehört nicht zu diesem Turnier match.player1 = null; } - if (match.player2 && match.player2.tournamentId !== tournamentId) { + + if (match.player2Id && validExternalParticipantIds.has(match.player2Id)) { + // Diese ID gehört zu einem externen Teilnehmer, also sollte player2 null sein + match.player2 = null; + } else if (match.player2 && !validTournamentMemberIds.has(match.player2.id)) { + // Das geladene TournamentMember gehört nicht zu diesem Turnier match.player2 = null; } });