# Optimization TODO

Stand: 2026-03-17

Diese Liste beschreibt die naechsten sinnvollen Optimierungsschritte nach dem zuletzt abgeschlossenen Diary-/UI-/Scheduler-Block.

## Prioritaet A

- [x] `DiaryView.vue` weiter zerlegen.
  Grund: Die View ist mit ~221 KB weiterhin eine der groessten Frontend-Dateien und enthaelt noch sehr viel Fachlogik, Socket-Handling, Planlogik und Dialogzustand in einer Datei.
  Ziel:
  - Plan-/Editorlogik in eigene Komponenten/Composables ziehen
  - Teilnehmerstatus-/Galerielogik separat kapseln
  - Socket-Update-Handling vom View-Code entkoppeln
  Erledigt am 2026-03-17:
  - Kopf-/Overview-Bereich in `components/diary/DiaryOverviewPanels.vue` ausgelagert
  - Teilnehmerstatus-/Galerie-Logik in den bereits separierten Diary-Komponenten weiter verdichtet
  - Gruppeneditor-Updatepfad in der View vereinheitlicht

- [x] `TournamentTab.vue` weiter zerlegen.
  Grund: Mit ~224 KB ist das aktuell die groesste View. Das Risiko fuer Regressionen und Pflegekosten ist dort weiterhin hoch.
  Ziel:
  - Ergebnisse, Konfiguration, Vorschau und Spezialdialoge weiter trennen
  - fachliche Helper in Service/Composable auslagern
  Erledigt am 2026-03-17:
  - Workspace-Kopf in `components/tournament/TournamentWorkspaceHeader.vue` ausgelagert
  - Statuschips, Problemleiste, Tab- und Result-Subnav aus der View extrahiert

- [x] `MatchReportApiDialog.vue` technisch bereinigen.
  Grund: Die Komponente ist mit ~211 KB sehr gross und enthaelt weiterhin viele lokale Styles und viel imperative DOM-/Farblogik.
  Ziel:
  - lokale Inline-Style-/Farbmanipulationen reduzieren
  - Statusdarstellung ueber Klassen statt direkte DOM-Manipulation
  - Dialog in kleinere Funktionsbereiche zerlegen
  Erledigt am 2026-03-17:
  - PIN-Feedback und Signierstatus auf reaktive Klassen umgestellt
  - direkte DOM-Manipulation fuer PIN-/Button-Farben entfernt
  - ungenutzte imperative Hilfsmethoden entfernt

## Prioritaet B

- [x] Offene Backend-TODOs in `autoFetchMatchResultsService.js` schliessen.
  Aktuelle Fundstellen:
  - Datenverarbeitung/Speicherung an einer Reststelle
  - Double-Statistiken noch nicht gespeichert
  Ziel:
  - Rest-TODOs entweder implementieren oder bewusst entfernen/dokumentieren
  Erledigt am 2026-03-17:
  - Single-/Double-Statistiken in explizite Verarbeitungsschritte aufgeteilt
  - Doppelpartner werden jetzt ebenfalls gegen lokale Mitglieder gematcht
  - myTischtennis-Spieler-IDs werden fuer beide Doppelspieler nachgezogen
  - offene Inline-TODOs im Service entfernt

- [x] Rating-Update-Logik aus `MYTISCHTENNIS_AUTO_FETCH_README.md` wirklich fertigstellen oder die Doku an den Ist-Zustand angleichen.
  Grund: In der Doku stehen noch offene Kernpunkte, die spaeter verwirrend sind, wenn der Scheduler als "fertig" wahrgenommen wird.
  Erledigt am 2026-03-17:
  - Doku auf den aktuellen Scheduler-/HTTP-Trigger-Stand gebracht
  - Rating-Updates und Match-Results als aktiv dokumentiert
  - nur die tatsaechlich noch offenen fachlichen Restpunkte verbleiben

- [x] Gruppenzuordnungs-REST-TODO in `DiaryView.vue` schliessen.
  Aktuelle Fundstelle:
  - `// TODO: API-Call zum Speichern der Gruppenzuordnung`
  Ziel:
  - keine offenen Inline-TODOs in produktiv genutzten Hauptviews
  Erledigt am 2026-03-17:
  - toten lokalen Stub fuer Aktivitaets-Gruppenzuordnung entfernt
  - damit keine offene Schein-REST-Stelle mehr in der Hauptview

## Prioritaet C

- [x] `MembersView.vue` weiter komponentisieren.
  Grund: Die View ist mit ~134 KB weiterhin sehr gross, obwohl die UX bereits stark verbessert wurde.
  Ziel:
  - Tabellenbereich
  - Preview-Bereich
  - Bulk-/Exportbereich
  jeweils sauber trennen
  Erledigt am 2026-03-17:
  - Kopf-, Filter-, Sortier- und Exportbereich in `components/members/MembersOverviewSection.vue` ausgelagert
  - View fokussiert jetzt staerker auf Preview, Tabelle und Editorlogik

- [x] `TeamManagementView.vue` weiter entdichten.
  Grund: Trotz erster Extraktion ist die View mit ~93 KB noch immer sehr umfangreich.
  Ziel:
  - Workspace-Sektionen weiter in eigene Komponenten ziehen
  - Job-/Dokument-/MyTischtennis-Bloecke isolieren
  Erledigt am 2026-03-17:
  - Seitenkopf, Scheduler-Kompaktstatus und Teamliste in `components/team/TeamManagementOverview.vue` ausgelagert
  - View konzentriert sich damit staerker auf den eigentlichen Team-Workspace

- [x] `ScheduleView.vue` weiter bereinigen.
  Grund: Mit ~80 KB steckt dort weiterhin viel kombinierte UI- und Lade-/Filterlogik.
  Ziel:
  - Match-Tabelle
  - Tabellenansicht
  - Team-/Liga-Auswahl
  separat machen
  Erledigt am 2026-03-17:
  - Kopf, Summary, Auswahlspalte und Workspace-Frame in `components/schedule/ScheduleLayoutShell.vue` ausgelagert
  - PDF-Export auf den neuen Shell-Ref angepasst

## Prioritaet D

- [x] Selten genutzte Spezialviews optisch komplett an das Theme angleichen.
  Wahrscheinliche Kandidaten:
  - `MatchReportDialog.vue`
  - `NuscoreAnalyzer.vue`
  - verbleibende Tournament-Unterkomponenten
  - `PermissionsView.vue`
  Ziel:
  - keine hart sichtbaren Bootstrap-/Altfarben in Randbereichen
  Erledigt am 2026-03-17:
  - `MatchReportDialog.vue`, `NuscoreAnalyzer.vue` und `PermissionsView.vue` auf Theme-Farben und ruhigere Statusflaechen umgestellt
  - `TournamentResultsTab.vue` als verbleibender sichtbarer Tournament-Randbereich an die Badge-/Statuslogik des Themes angepasst

- [x] Zeichnungs-/Court-Komponenten visuell und technisch aufraeumen.
  Kandidaten:
  - `CourtDrawingTool.vue`
  - `CourtDrawingRender.vue`
  Grund:
  - grosse Komponenten
  - funktionale Farbsemantik gemischt mit Alt-Styling
  Erledigt am 2026-03-17:
  - Court-Paletten zentralisiert
  - Tool-/Render-Flaechen, Buttons und Grid-Zustaende ans Theme angepasst
  - verbliebene harte Altfarben im sichtbaren UI deutlich reduziert

## Querliegende Verbesserungen

- [x] Manuelle SQL-Migrationen kuenftig direkt mit jeder Schemaaenderung in `docs/manual_sql_migrations.md` mitpflegen.
  Erledigt am 2026-03-18:
  - Pflege-Regel direkt in `docs/manual_sql_migrations.md` dokumentiert
  - SQL-Migrationsdoku damit nicht mehr nur Sammelablage, sondern verbindlicher Prozesspunkt

- [x] Fuer grosse Frontend-Dateien eine grobe Zielgroesse einfuehren.
  Vorschlag:
  - Warnbereich ab ~80 KB
  - struktureller Refactor ab ~120 KB
  Erledigt am 2026-03-18:
  - `docs/frontend_size_budget.md` angelegt
  - Audit-Skript `npm run audit:frontend-size` ergaenzt

- [x] Inline-TODOs/FIXMEs regelmaessig in Repo-Doku ueberfuehren und aus produktiven Hauptdateien entfernen.
  Erledigt am 2026-03-18:
  - `docs/inline_todo_registry.md` angelegt
  - Audit-Skript `npm run audit:inline-todos` ergaenzt
  - Produktivcode per Audit geprueft: keine offenen Marker in `frontend/src` und `backend`

## Aktuelle groesste Kandidaten nach Dateigroesse

- `frontend/src/views/TournamentTab.vue` (~224 KB)
- `frontend/src/views/DiaryView.vue` (~221 KB)
- `frontend/src/components/MatchReportApiDialog.vue` (~211 KB)
- `backend/services/tournamentService.js` (~190 KB)
- `frontend/src/views/MembersView.vue` (~134 KB)
- `frontend/src/components/tournament/TournamentConfigTab.vue` (~115 KB)
- `frontend/src/views/TeamManagementView.vue` (~93 KB)
- `frontend/src/views/OfficialTournaments.vue` (~91 KB)
- `frontend/src/views/ScheduleView.vue` (~80 KB)

## Empfehlung fuer den naechsten echten Arbeitsblock

1. `DiaryView.vue` weiter zerlegen
2. `MatchReportApiDialog.vue` bereinigen
3. Backend-Rest-TODOs im Scheduler/Auto-Fetch schliessen
4. `MembersView.vue` und `TeamManagementView.vue` weiter komponentisieren
