diff --git a/backend/services/tournamentService.js b/backend/services/tournamentService.js index fdfd2fe..9a90a10 100644 --- a/backend/services/tournamentService.js +++ b/backend/services/tournamentService.js @@ -718,8 +718,9 @@ class TournamentService { * Minimeisterschaft anlegen: Turnier + 6 vorkonfigurierte Klassen (Jungen/Mädchen 12, 10, 8). * Name wird generiert: "Minimeisterschaften Ortsentscheid ". * Jahr Y: 12 = in Y 11 oder 12 Jahre (Geburtsjahr Y-12 oder Y-11), 10 = 9/10 (Y-10, Y-9), 8 = 8 oder jünger (≥ Y-8). + * Standard-Gewinnsätze: 1. */ - async addMiniChampionship(userToken, clubId, ort, date, year, winningSets = 3) { + async addMiniChampionship(userToken, clubId, ort, date, year, winningSets = 1) { await checkAccess(userToken, clubId); const ortTrimmed = (ort || '').trim(); if (!ortTrimmed) { @@ -734,38 +735,47 @@ class TournamentService { throw new Error('Ungültiges Jahr für die Minimeisterschaft'); } const tournamentName = `Minimeisterschaften ${Y} Ortsentscheid ${ortTrimmed}`; - const t = await Tournament.create({ - name: tournamentName, - date, - clubId: +clubId, - bestOfEndroundSize: 0, - type: '', - winningSets: winningSets || 3, - allowsExternal: false, - miniChampionshipYear: Y - }); - const classes = [ - { name: 'Jungen 12', gender: 'male', minBirthYear: Y - 12, maxBirthYear: Y - 11 }, - { name: 'Jungen 10', gender: 'male', minBirthYear: Y - 10, maxBirthYear: Y - 9 }, - { name: 'Jungen 8', gender: 'male', minBirthYear: Y - 8, maxBirthYear: null }, - { name: 'Mädchen 12', gender: 'female', minBirthYear: Y - 12, maxBirthYear: Y - 11 }, - { name: 'Mädchen 10', gender: 'female', minBirthYear: Y - 10, maxBirthYear: Y - 9 }, - { name: 'Mädchen 8', gender: 'female', minBirthYear: Y - 8, maxBirthYear: null }, - ]; - for (let i = 0; i < classes.length; i++) { - await TournamentClass.create({ - tournamentId: t.id, - name: classes[i].name, - sortOrder: i + 1, - isDoubles: false, - gender: classes[i].gender, - minBirthYear: classes[i].minBirthYear, - maxBirthYear: classes[i].maxBirthYear - }); + const sets = (winningSets != null && winningSets >= 1) ? Number(winningSets) : 1; + + const transaction = await Tournament.sequelize.transaction(); + try { + const t = await Tournament.create({ + name: tournamentName, + date, + clubId: +clubId, + type: '', + winningSets: sets, + allowsExternal: false, + miniChampionshipYear: Y + }, { transaction }); + + const classes = [ + { name: 'Jungen 12', gender: 'male', minBirthYear: Y - 12, maxBirthYear: Y - 11 }, + { name: 'Jungen 10', gender: 'male', minBirthYear: Y - 10, maxBirthYear: Y - 9 }, + { name: 'Jungen 8', gender: 'male', minBirthYear: Y - 8, maxBirthYear: null }, + { name: 'Mädchen 12', gender: 'female', minBirthYear: Y - 12, maxBirthYear: Y - 11 }, + { name: 'Mädchen 10', gender: 'female', minBirthYear: Y - 10, maxBirthYear: Y - 9 }, + { name: 'Mädchen 8', gender: 'female', minBirthYear: Y - 8, maxBirthYear: null }, + ]; + for (let i = 0; i < classes.length; i++) { + await TournamentClass.create({ + tournamentId: t.id, + name: classes[i].name, + sortOrder: i + 1, + isDoubles: false, + gender: classes[i].gender, + minBirthYear: classes[i].minBirthYear, + maxBirthYear: classes[i].maxBirthYear + }, { transaction }); + } + await transaction.commit(); + return JSON.parse(JSON.stringify(await Tournament.findByPk(t.id, { + attributes: ['id', 'name', 'date', 'allowsExternal', 'miniChampionshipYear'] + }))); + } catch (err) { + await transaction.rollback(); + throw err; } - return JSON.parse(JSON.stringify(await Tournament.findByPk(t.id, { - attributes: ['id', 'name', 'date', 'allowsExternal', 'miniChampionshipYear'] - }))); } // 3. Teilnehmer hinzufügen (kein Duplikat) - klassengebunden diff --git a/frontend/src/components/tournament/TournamentConfigTab.vue b/frontend/src/components/tournament/TournamentConfigTab.vue index c37ec63..02d2e1d 100644 --- a/frontend/src/components/tournament/TournamentConfigTab.vue +++ b/frontend/src/components/tournament/TournamentConfigTab.vue @@ -48,7 +48,7 @@ @update:newClassMinBirthYear="$emit('update:newClassMinBirthYear', $event)" /> -
+

Zwischenrunde & Endrunde

Lade Zwischenrunden … @@ -224,6 +224,10 @@ export default { type: Boolean, required: true }, + isMiniChampionship: { + type: Boolean, + default: false + }, tournamentClasses: { type: Array, required: true diff --git a/frontend/src/views/TournamentTab.vue b/frontend/src/views/TournamentTab.vue index 7ecbb08..99c5fbc 100644 --- a/frontend/src/views/TournamentTab.vue +++ b/frontend/src/views/TournamentTab.vue @@ -95,6 +95,7 @@ :club-id="currentClub" :tournament-id="selectedDate" :tournament-name="currentTournamentName" + :is-mini-championship="isMiniChampionship" :tournament-date="currentTournamentDate" :winning-sets="currentWinningSets" :is-group-tournament="isGroupTournament"