Zum Hauptinhalt springen

Refactoring-Plan (Phasen 1–5)

Durchnummerierter, phasenweiser Refactoring-Plan. Jede Phase kann einzeln freigegeben und umgesetzt werden.


Phase 1: Kritische Fixes (Quick Wins)

Sofort umsetzbare Korrekturen die Best-Practice-Verstöße oder potenzielle Bugs beheben.

1.1 session()->flash() durch Toast-Dispatch ersetzen

EigenschaftWert
PrioritätMittel
Aufwand~30 Min
RisikoNiedrig

Laut CLAUDE.md ist session()->flash() verboten — alle Benachrichtigungen müssen über Toast-Dispatch laufen.

Verbleibende Stellen:

DateiZeile(n)KontextLösung
app/Http/Controllers/Watchers/ToggleFavoriteController.php52, 56Favorit togglen (POST + Redirect)Zu Livewire-Action konvertieren
bootstrap/app.php96CSRF 419-Fehler (Pre-Livewire)✅ Akzeptabel — Bridge-Pattern

Hinweis: Der ToggleFavoriteController ist ein traditioneller Controller mit return back(). Die Flash-Messages werden über NotificationCenter::dispatchFlashToasts() korrekt als Toast-Events dispatcht. Der sauberste Fix wäre die Konvertierung zu einer Livewire-Action.

Location: app/Http/Controllers/Watchers/ToggleFavoriteController.php

1.1b Toast-Pattern-Inkonsistenz: Flux::toast() vs dispatch('show-toast')

EigenschaftWert
PrioritätNiedrig
Aufwand~20 Min
RisikoNiedrig

Das Projekt verwendet zwei verschiedene Toast-Patterns — beide funktionieren, aber die Inkonsistenz erschwert die Wartung:

PatternStellenComponents
$this->dispatch('show-toast', [...])122+Alle Standard-Components
Flux::toast(...)~13Explore/*, Admin/TagManagement

Aktion: Alle Flux::toast() Aufrufe durch $this->dispatch('show-toast', [...]) ersetzen für einheitliches Pattern.

Location: app/Livewire/Explore/*.php, app/Livewire/Admin/TagManagement/Index.php


1.2 env() in Code durch config() ersetzen

EigenschaftWert
PrioritätNiedrig
Aufwand~15 Min
RisikoNiedrig

Laravel Best Practice: env() darf nur in Config-Dateien verwendet werden, im Code immer config(). Nach config:cache liefert env() im Code null zurück.

ERLEDIGT (2026-03-06): Sentry wurde vollständig entfernt und durch Flare (spatie/laravel-flare) + Nightwatch (laravel/nightwatch) ersetzt. SentryRelease.php existiert nicht mehr. Dieser Punkt ist obsolet.


Phase 2: Custom Code → Flux UI Pro Migration

Ersetzen von handgebautem HTML/CSS durch Flux UI Pro Components für konsistente UI und weniger Wartungsaufwand.

2.1 Custom Modal → <flux:modal> (1 verbleibend)

EigenschaftWert
PrioritätNiedrig
Aufwand~30 Min
RisikoNiedrig

Status: Die Modals in admin/related-channels, admin/social-profiles und die meisten in watchers/index wurden bereits auf <flux:modal> migriert.

Verbleibendes Custom-Modal:

DateiKontext
resources/views/livewire/watchers/index.blade.phpWorkspace-Edit-Modal (raw HTML mit Alpine)

Location: resources/views/livewire/watchers/index.blade.php


2.2 Custom HTML-Tabellen → <flux:table>

EigenschaftWert
PrioritätMittel
Aufwand~20 Min pro Tabelle
RisikoNiedrig

Zwei Admin-Seiten verwenden noch <table> HTML statt <flux:table>:

DateiKontext
resources/views/livewire/admin/log-queue/index.blade.phpQueue-Status-Tabelle
resources/views/livewire/admin/statistics/index.blade.phpDiverse Statistik-Tabellen

Location: Betroffene Blade-Views


2.3 Raw HTML <input type="checkbox"><flux:checkbox>

EigenschaftWert
PrioritätNiedrig
Aufwand~10 Min
RisikoNiedrig

Eine Stelle verwendet noch rohes HTML-Checkbox statt Flux UI:

DateiKontext
resources/views/livewire/watchers/index.blade.php"Low Priority Import" Checkbox

Location: resources/views/livewire/watchers/index.blade.php


Phase 3: Component-Refactoring (Große Dateien aufteilen)

Die größten Livewire-Components und Services in kleinere, fokussierte Einheiten aufteilen.

3.1 Dashboard/Index.php aufteilen (1352 Zeilen)

EigenschaftWert
PrioritätHoch
Aufwand~2-3 Stunden
RisikoMittel (viele Tests betroffen)

Größte Livewire-Component im Projekt. Enthält Dashboard-Logik, Leaderboard-Queries, Rollup-Daten und Chart-Konfiguration.

Vorschlag:

Neue Component / PartialVerantwortung
Dashboard\IndexHaupt-Container, Period-Switcher, Layout
Dashboard\LeaderboardPanelLeaderboard-Queries + Rendering
Dashboard\MetricsOverviewStat-Boxes, KPI-Berechnung
Dashboard\GrowthChartChart-Logik (Follower Growth)
Dashboard\ActivityFeedRecent Activity / Scrape-Status

Location: app/Livewire/Dashboard/Index.php


3.2 Watchers/Index.php aufteilen (1108 Zeilen)

EigenschaftWert
PrioritätHoch
Aufwand~2-3 Stunden
RisikoMittel

Vorschlag:

Neue Component / PartialVerantwortung
Watchers\IndexHaupt-Container, Layout, Pagination
Watchers\FilterBarSuch- und Filter-Logik
Watchers\BulkActionsBulk-Import, Bulk-Delete, CSV-Export
Watchers\WatcherCardEinzelne Watcher-Card-Darstellung

Location: app/Livewire/Watchers/Index.php


3.3 Watchers/Show.php aufteilen (1095 Zeilen)

EigenschaftWert
PrioritätMittel
Aufwand~2-3 Stunden
RisikoMittel

Vorschlag:

Neue Component / PartialVerantwortung
Watchers\ShowHaupt-Container, Profil-Header
Watchers\MetricsChartChart-Rendering, Zeitraum-Wechsel
Watchers\ProfileDetailsProfil-Details, Social Links
Watchers\VideoListYouTube-Video-Tabelle
Watchers\AdminActionsAdmin-only Aktionen (Block, Sanitize, Prune)

Location: app/Livewire/Watchers/Show.php


3.4 SystemHealthService aufteilen (727 Zeilen)

EigenschaftWert
PrioritätMittel
Aufwand~1-2 Stunden
RisikoNiedrig

Vorschlag:

Neue Service-KlasseVerantwortung
SystemHealthServiceOrchestrator, Gesamtstatus
QueueHealthCheckerQueue-Status, Failed Jobs, Stuck Jobs
ScrapingHealthCheckerScrape-Metriken, API-Status, Collector
DatabaseHealthCheckerDB-Size, Connection, Slow Queries

Location: app/Services/Health/SystemHealthService.php


3.5 CrossPlatformRelatedCalculator aufteilen (742 Zeilen)

EigenschaftWert
PrioritätMittel
Aufwand~1-2 Stunden
RisikoNiedrig

Vorschlag:

Neue Service-KlasseVerantwortung
CrossPlatformRelatedCalculatorOrchestrator
CrossPlatformUrlMatcherURL-basierte Erkennung
CrossPlatformNameMatcherName-/Handle-basierte Erkennung
CrossPlatformScorerConfidence-Score-Berechnung

Location: app/Services/Social/CrossPlatformRelatedCalculator.php


Phase 4: Template-Cleanup

4.1 @php Logik aus Blade-Templates extrahieren

EigenschaftWert
PrioritätMittel
Aufwand~1-2 Stunden
RisikoNiedrig

Mehrere Templates enthalten umfangreiche @php ... @endphp Blöcke mit Business-Logik. Diese Logik gehört in die Livewire-Component (Computed Properties) oder in Services.

Betroffene Dateien (Auswahl):

DateiLogikVerschieben nach
resources/views/livewire/watchers/show.blade.phpChart-Daten-TransformationShow.php Computed Property
resources/views/livewire/dashboard/index.blade.phpLeaderboard-FormatierungIndex.php Computed Property
resources/views/livewire/explore/index.blade.phpStat-BerechnungIndex.php Computed Property

4.2 Loading States vereinheitlichen

EigenschaftWert
PrioritätNiedrig
Aufwand~1 Stunde
RisikoNiedrig

Verschiedene Loading-Patterns im Einsatz. Standardisieren auf Flux-Pattern.

Location: Diverse Blade-Views


Phase 5: Code-Qualität & Dokumentation

5.1 PHPDoc für öffentliche Service-Methoden

EigenschaftWert
PrioritätNiedrig
Aufwand~2 Stunden
RisikoKeins

Mehrere Services haben keine oder unvollständige PHPDoc-Kommentare:

ServiceFehlende Docs
ExploreMetricsCalculatorPublic methods calculate(), updateTrendingFlags()
ProfileScoreCalculatorFormel-Dokumentation
CrossPlatformRelatedCalculatorMatching-Algorithmus
SocialProfileLinkSyncerSync-Logik, Rejected-Link-Handling

Location: app/Services/


5.2 Eager Loading Reviews

EigenschaftWert
PrioritätMittel
Aufwand~1 Stunde
RisikoNiedrig

Potenzielle N+1 Query-Probleme:

ComponentRelationKontext
Watchers/Indexwatcher.socialProfile.latestMetricWatcher-Liste
Explore/Browseprofile.tags, profile.scoreProfil-Grid
Dashboard/Indexleaderboard.profiles.metricsLeaderboard

Aktion: Model::preventLazyLoading(!app()->isProduction()) in AppServiceProvider aktivieren, N+1 Queries identifizieren und mit with() / withCount() beheben.


5.3 DB::raw() Audit

EigenschaftWert
PrioritätNiedrig
Aufwand~30 Min (Review)
RisikoKeins

Es gibt 37+ DB::raw() Stellen im Code. Ein Stichproben-Audit zeigt, dass alle aktuell sicher sind (keine User-Input-Interpolation). Trotzdem sollte ein vollständiger Review dokumentiert werden.

Location: app/Services/, app/Console/Commands/, app/Livewire/


Zusammenfassung

PhaseItemsPrioritätGeschätzter Aufwand
Phase 1: Kritische Fixes3Hoch–Mittel~1 Stunde
Phase 2: Flux UI Migration3Mittel–Niedrig~1-2 Stunden
Phase 3: Component-Refactoring5Hoch–Mittel~8-12 Stunden
Phase 4: Template-Cleanup2Mittel–Niedrig~2-3 Stunden
Phase 5: Code-Qualität3Mittel–Niedrig~3-4 Stunden
Gesamt16 Items~15-22 Stunden

Empfohlene Reihenfolge: Phase 1 → Phase 2 → Phase 3.1 (Dashboard) → Phase 3.2 (Watchers/Index) → Rest nach Bedarf.