Add league configuration endpoint and frontend integration for myTischtennis
Implemented a new POST endpoint in MyTischtennisUrlController to configure leagues from table URLs, including season creation logic. Updated myTischtennisRoutes to include the new route for league configuration. Enhanced the myTischtennisUrlParserService to support parsing of table URLs and added a method for decoding group names. Updated TeamManagementView.vue to prompt users for league configuration when a table URL is detected, providing feedback upon successful configuration and reloading relevant data.
This commit is contained in:
@@ -841,7 +841,33 @@ export default {
|
||||
};
|
||||
|
||||
const configureTeamFromUrl = async () => {
|
||||
if (!parsedMyTischtennisData.value || !teamToEdit.value) {
|
||||
if (!parsedMyTischtennisData.value) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Für Tabellen-URLs: Biete Liga-Konfiguration an
|
||||
if (parsedMyTischtennisData.value.urlType === 'table') {
|
||||
const confirmed = await showConfirm(
|
||||
'Liga konfigurieren?',
|
||||
'Tabellen-URL erkannt',
|
||||
`Verband: ${parsedMyTischtennisData.value.association}\nSaison: ${parsedMyTischtennisData.value.season}\nLiga: ${parsedMyTischtennisData.value.groupname}\nGruppen-ID: ${parsedMyTischtennisData.value.groupId}\n\nMöchten Sie diese Liga in der Datenbank konfigurieren? Dies ermöglicht es, Tabellendaten automatisch abzurufen.`,
|
||||
'info'
|
||||
);
|
||||
|
||||
if (confirmed) {
|
||||
await configureLeagueFromUrl();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Für Team-URLs: Normale Konfiguration
|
||||
if (!teamToEdit.value) {
|
||||
await showInfo(
|
||||
'Team auswählen',
|
||||
'Bitte wählen Sie zuerst ein Team aus',
|
||||
'Um die MyTischtennis-Konfiguration zu aktivieren, müssen Sie zuerst ein Team aus der Liste auswählen.',
|
||||
'warning'
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -866,8 +892,19 @@ export default {
|
||||
'success'
|
||||
);
|
||||
|
||||
// Teams neu laden
|
||||
// Teams und Ligen neu laden
|
||||
await loadTeams();
|
||||
await loadLeagues();
|
||||
|
||||
// Aktuelles Team mit neuen Daten aktualisieren
|
||||
if (teamToEdit.value) {
|
||||
const updatedTeam = teams.value.find(t => t.id === teamToEdit.value.id);
|
||||
if (updatedTeam) {
|
||||
teamToEdit.value = updatedTeam;
|
||||
// Team-Dokumente neu laden
|
||||
await loadTeamDocuments();
|
||||
}
|
||||
}
|
||||
|
||||
// Parsed Data löschen
|
||||
clearParsedData();
|
||||
@@ -881,6 +918,46 @@ export default {
|
||||
}
|
||||
};
|
||||
|
||||
const configureLeagueFromUrl = async () => {
|
||||
if (!parsedMyTischtennisData.value || parsedMyTischtennisData.value.urlType !== 'table') {
|
||||
return;
|
||||
}
|
||||
|
||||
configuringTeam.value = true;
|
||||
myTischtennisError.value = '';
|
||||
myTischtennisSuccess.value = '';
|
||||
|
||||
try {
|
||||
const response = await apiClient.post('/mytischtennis/configure-league', {
|
||||
url: myTischtennisUrl.value.trim(),
|
||||
createSeason: true
|
||||
});
|
||||
|
||||
if (response.data.success) {
|
||||
myTischtennisSuccess.value = 'Liga erfolgreich konfiguriert! Tabellendaten können jetzt automatisch abgerufen werden.';
|
||||
await showInfo(
|
||||
'Erfolg',
|
||||
'Liga erfolgreich konfiguriert!',
|
||||
`Liga: ${response.data.data.league.name}\nSaison: ${response.data.data.season?.name || 'Nicht erstellt'}\nVerband: ${response.data.data.league.association}\nGruppen-ID: ${response.data.data.league.myTischtennisGroupId}\n\nTabellendaten können jetzt automatisch abgerufen werden.`,
|
||||
'success'
|
||||
);
|
||||
|
||||
// Teams und Ligen neu laden
|
||||
await loadTeams();
|
||||
await loadLeagues();
|
||||
|
||||
// Parsed Data löschen
|
||||
clearParsedData();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Fehler bei der Liga-Konfiguration:', error);
|
||||
myTischtennisError.value = error.response?.data?.message || 'Liga konnte nicht konfiguriert werden.';
|
||||
await showInfo('Fehler', myTischtennisError.value, '', 'error');
|
||||
} finally {
|
||||
configuringTeam.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const clearParsedData = () => {
|
||||
parsedMyTischtennisData.value = null;
|
||||
myTischtennisUrl.value = '';
|
||||
@@ -1074,6 +1151,7 @@ export default {
|
||||
onSeasonChange,
|
||||
parseMyTischtennisUrl,
|
||||
configureTeamFromUrl,
|
||||
configureLeagueFromUrl,
|
||||
clearParsedData,
|
||||
getMyTischtennisStatus,
|
||||
fetchTeamDataManually,
|
||||
|
||||
Reference in New Issue
Block a user