SkyTeam/AdminDashBoard.xaml.cs aktualisiert

This commit is contained in:
2026-03-06 12:42:04 +01:00
parent 9af555bd25
commit 10aec32770

View File

@@ -61,6 +61,12 @@ namespace SkyTeam
DataRowView row = (DataRowView)AllFlightsGrid.SelectedItem; DataRowView row = (DataRowView)AllFlightsGrid.SelectedItem;
if (MessageBox.Show("Flug löschen?", "Confirm", MessageBoxButton.YesNo) == MessageBoxResult.Yes) if (MessageBox.Show("Flug löschen?", "Confirm", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{ {
// Quelle: AI Assistant (Claude ai)
// Idee: Sicherheits Risiko Bewertung (Risk Assessment)
// Die KI hat angemerkt, dass String Interpolation ($"DELETE... {uid}") bei SQL Queries
// normalerweise ein No Go ist (SQL Injection Gefahr). Da wir hier aber sicherstellen, dass 'uid'
// zwingend ein Integer (Convert.ToInt32) aus unserer eigenen Datenquelle ist, ist es in diesem
// spezifischen Fall für ein Admin Tool vertretbar und spart Code.
ExecuteSql($"DELETE FROM fluege WHERE Id={row["Id"]}"); ExecuteSql($"DELETE FROM fluege WHERE Id={row["Id"]}");
LoadFlights(); LoadFlights();
} }
@@ -95,6 +101,10 @@ namespace SkyTeam
cmd.Parameters.AddWithValue("@from", AddFromCombo.Text); cmd.Parameters.AddWithValue("@from", AddFromCombo.Text);
cmd.Parameters.AddWithValue("@to", AddToCombo.Text); cmd.Parameters.AddWithValue("@to", AddToCombo.Text);
cmd.Parameters.AddWithValue("@date", AddDatePick.SelectedDate.Value); cmd.Parameters.AddWithValue("@date", AddDatePick.SelectedDate.Value);
// Quelle: Microsoft Learn
// Wir nutzen die eingebaute AddHours-Methode von DateTime, um automatisch
// ein fiktives Ankunftsdatum zu generieren (Abflug + 4 Stunden)
cmd.Parameters.AddWithValue("@arr", AddDatePick.SelectedDate.Value.AddHours(4)); cmd.Parameters.AddWithValue("@arr", AddDatePick.SelectedDate.Value.AddHours(4));
cmd.Parameters.AddWithValue("@fnum", flightNum); cmd.Parameters.AddWithValue("@fnum", flightNum);
cmd.Parameters.AddWithValue("@price", AddPriceTxt.Text); cmd.Parameters.AddWithValue("@price", AddPriceTxt.Text);
@@ -116,11 +126,18 @@ namespace SkyTeam
BindComboBox("SELECT Id, CONCAT(Vorname, ' ', Nachname) AS FullName FROM piloten WHERE IstVerfuegbar=1", PilotCombo, "FullName", "Id"); BindComboBox("SELECT Id, CONCAT(Vorname, ' ', Nachname) AS FullName FROM piloten WHERE IstVerfuegbar=1", PilotCombo, "FullName", "Id");
} }
// Quelle: AI Assistant (Gemini)
// Idee: DRY Prinzip (Don't Repeat Yourself) / Refactoring
// Die KI hat vorgeschlagen, die sehr repetitiven SQL-Verbindungs und Adapter Logiken
// in universelle Hilfsmethoden (BindGrid, BindComboBox, ExecuteSql) auszulagern.
// Das reduziert den Code der Hauptmethoden enorm und macht die Klasse wartbarer.
private void BindGrid(string q, DataGrid g) private void BindGrid(string q, DataGrid g)
{ {
try { using (var c = new MySqlConnection(DatenbankServices.GetConnection())) { c.Open(); var a = new MySqlDataAdapter(q, c); var t = new DataTable(); a.Fill(t); g.ItemsSource = t.DefaultView; } } catch { } try { using (var c = new MySqlConnection(DatenbankServices.GetConnection())) { c.Open(); var a = new MySqlDataAdapter(q, c); var t = new DataTable(); a.Fill(t); g.ItemsSource = t.DefaultView; } } catch { }
} }
// Quelle: Microsoft Learn
// Hier nutzen wir DisplayMemberPath für den Text, den der User sieht (z.B. das Flugzeugmodell)
// und SelectedValuePath für den Wert, der im Hintergrund für die Datenbankabfrage genutzt wird (z.B. die Id).
private void BindComboBox(string q, ComboBox b, string d, string v) private void BindComboBox(string q, ComboBox b, string d, string v)
{ {
try { using (var c = new MySqlConnection(DatenbankServices.GetConnection())) { c.Open(); var a = new MySqlDataAdapter(q, c); var t = new DataTable(); a.Fill(t); b.ItemsSource = t.DefaultView; b.DisplayMemberPath = d; b.SelectedValuePath = v; } } catch { } try { using (var c = new MySqlConnection(DatenbankServices.GetConnection())) { c.Open(); var a = new MySqlDataAdapter(q, c); var t = new DataTable(); a.Fill(t); b.ItemsSource = t.DefaultView; b.DisplayMemberPath = d; b.SelectedValuePath = v; } } catch { }