Zum Hauptinhalt springen

TopsFlops/Index

Globale Leaderboards mit den groessten Gewinnern und Verlierern ueber alle Workspaces hinweg.

Route: /tops-flops View: resources/views/livewire/tops-flops/index.blade.php Location: app/Livewire/TopsFlops/Index.php

Public Properties

PropertyTypDefaultBeschreibung
$periodstring'7d'Zeitraum (fix 7 Tage)
$metricstring'followers'Ausgewaehlte Metrik
$platformstring'all'Plattform-Filter: 'all', 'youtube', 'instagram' (zeigt Profilanzahl im Dropdown)
$platformCountsarray[]Profil-Counts pro Plattform aus ungefilterten Snapshot-Daten
$favoritesFilterstring'all'Favoriten-Filter: 'all', 'favorites'
$hasFavoritesboolfalseOb der User Favoriten hat
$tierstring'all'Follower-Tier Filter
$leadersMaxint25Max. Eintraege pro Liste (Seitengroesse)
$winnersarray[]Gewinner-Liste mit Tracking-Flags
$losersarray[]Verlierer-Liste mit Tracking-Flags
$chartDataarray[]Aggregierte Chart-Daten fuer die Metrik
$chartXTickValuesarray[]X-Achsen-Ticks
$chartYTickValuesarray[]Y-Achsen-Ticks
$chartMaxint0Maximaler Wert fuer Y-Achsen-Skalierung
$hasSnapshotboolfalseOb Snapshot-Daten vorhanden sind
$rangeEndDatestring|nullnullEnd-Datum der Ansicht
$rangeLabelstring''Formatiertes Datum-Label (z.B. "02.02.2026 bis 08.02.2026")
$canGoPreviousboolfalseNavigation rueckwaerts moeglich
$canGoNextboolfalseNavigation vorwaerts moeglich
$loadErrorboolfalseLade-Fehler aufgetreten

Verfuegbare Metriken

KeyLabel
followersFollower
viewsViews
videosVideos
postsBeitraege
followingFollowing
scorePostbox Score

Actions

MethodBeschreibung
updatedMetric()Daten fuer geaenderte Metrik laden
updatedPlatform()Plattform-Filter aendern, Daten neu laden
updatedFavoritesFilter()Favoriten-Filter aendern, Daten neu laden
updatedTier()Tier-Filter aendern, Daten neu laden
goPreviousRange()7 Tage zurueck navigieren
goNextRange()7 Tage vor navigieren
addToWorkspace(int $profileId, int $workspaceId)Profil aus Leaderboard zum Workspace hinzufuegen
countByPlatform(array, array)Zaehlt Profile pro Plattform aus Winners+Losers (vor Platform-Filter)
getAvailableMetrics()Alle verfuegbaren Metriken als Array
getUserWorkspaces()User-Workspaces ohne Favoriten und Admin
periodLabel()"7 Tage"
chartMetricLabel()Lokalisierter Label der aktuellen Metrik

Datenarchitektur

Tops & Flops laedt Daten ausschliesslich aus dashboard_global_snapshots -- vorberechnete taeglich aggregierte Snapshots.

Snapshot-Tabelle

dashboard_global_snapshots
├── period: '7d'
├── metric: 'followers' | 'views' | ...
├── tier: 'all' | 'micro' | 'small' | ...
├── end_date: date
├── winners: JSON (Array of profile data)
├── losers: JSON (Array of profile data)
└── chart: JSON (Zeitreihe)

Lade-Logik

  1. Snapshot fuer exaktes end_date suchen
  2. Fallback: Neuester Snapshot mit end_date <= end_date
  3. Fallback: Neuester Snapshot insgesamt (nur bei Standard-Ansicht)

Tracking-Flags

Winners/Losers werden mit is_tracking- und watcher_id-Flags angereichert. Diese werden lazy berechnet: Erst werden die Snapshot-Daten geladen (max ~50 Profile), dann werden nur fuer diese Profile-IDs die Tracking-Relationen aufgeloest. Das verhindert OOM bei Usern mit vielen Watchern.

// Nur fuer angezeigte Profile pruefen (max ~50 IDs)
resolveTrackingFlags($userId)
// Statt: Alle User-Profile in Memory laden

Datum-Navigation

AktionErgebnis
goPreviousRange()rangeEndDate -= 7 Tage
goNextRange()rangeEndDate += 7 Tage

Begrenzungen:

  • Rueckwaerts: Nicht vor dem fruehesten Datenpunkt (2026-01-08)
  • Vorwaerts: Nicht nach gestern

Chart-Rendering

Der Chart zeigt die aggregierten Tagesdaten ueber den gewaehlten 7-Tage-Zeitraum. Y-Achsen-Formatierung wechselt je nach Magnitude automatisch:

  • >= 1M: Kompakte Notation (z.B. "1,2M")
  • < 1M: Gruppierte Ganzzahlen (z.B. "150.000")

Events

RichtungEventBeschreibung
dispatchshow-toastFehlermeldungen