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.
This commit is contained in:
Torsten Schulz (local)
2025-12-17 08:50:05 +01:00
parent 13cd55c051
commit 65acc9e0d5

View File

@@ -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;
}
});