Basit Anlatım (Herkes İçin)
Ne yapıldı?
Kurumsal müzik sisteminde anons (spot) yönetimi artık tamamen dinamik! Ana şube anons eklediğinde, sildiğinde, ismini değiştirdiğinde, sıralamasını değiştirdiğinde veya aktif/pasif yaptığında, tüm şubeler 5 dakika içinde otomatik güncelleniyor.
Nasıl çalışıyor?
- Ana şube bir değişiklik yaptığında → Sistem otomatik "versiyon numarasını" artırıyor
- Şubeler her 5 dakikada bir kontrol ediyor → Versiyon değiştiyse yeni ayarları alıyorlar
- Anons listesi şubelerin tarayıcısında tutuluyor → Sunucu yükü yok, hızlı rotation
- Preload'lanmış anons geçersiz hale gelirse → Otomatik iptal ediliyor
💡 Gerçek Dünya Örneği:
Starbucks merkez ofisi "Yeni Latte" anonsunu ekliyor. 5 dakika içinde İstanbul Kadıköy, Ankara Kızılay, İzmir Alsancak şubelerindeki tüm müzik çalarlar bu anosu çalmaya başlıyor. Merkez ofis anosu arşivlerse, 5 dakika içinde hiçbir şube bu anosu çalmaz. Sıfır manuel müdahale!
Teknik Detaylar (Geliştiriciler İçin)
Backend (Laravel)
CorporateSpotObserver
Dosya: Modules/Muzibu/app/Observers/CorporateSpotObserver.php
- •
created()→ version++ - •
updated()→ version++ (tracked fields) - •
deleted()→ version++ - • İzlenen field'ler: title, starts_at, ends_at, is_enabled, is_archived, position
ServiceProvider
Dosya: MuzibuServiceProvider.php:110
- • Observer otomatik kaydedildi
- • Her model değişikliğinde tetikleniyor
Reorder Endpoint
Dosya: CorporateFrontController::reorderSpots()
- • Sıralama değişince version++
- • Drag & drop desteği
API Endpoint
Route: /api/spot/settings
- •
spot_settings_version - •
spots[](aktif, sıralı) - •
enabled,songs_between
Frontend (JavaScript)
Version Tracking
Dosya: spot-player.js
- •
state.spotSettingsVersion - •
state.activeSpots[] - • Version değişince
handleVersionChange()
Polling System
Dosya: spot-player.js
- •
startPolling()→ 5 dakikada bir - •
fetchSettings()→ API çağrısı - • Version kontrolü otomatik
Client-Side Rotation
Dosya: spot-player.js:playNextSpot()
- • API call yok, liste kullanılıyor
- • Rotation:
(index + 1) % length - • Performans: ⚡ Çok hızlı
Preload Invalidation
Dosya: spot-player.js:handleVersionChange()
- • Preload'lı spot kontrol ediliyor
- • Listede yoksa
clearPreload(true) - • Gapless playback korunuyor
Tamamlanan Özellikler (8/8)
Observer Pattern
Tüm değişiklikler otomatik yakalanıyor
ServiceProvider Kaydı
Observer otomatik çalışıyor
Reorder Version Increment
Sıralama değişince version++
API Spot Listesi
Version + aktif spot listesi dönüyor
Version Tracking
JavaScript'te version kontrolü
Preload Invalidation
Geçersiz preload otomatik iptal
Polling System
5 dakikada bir otomatik kontrol
Client-Side Rotation
API call yok, hızlı rotation
Sonuçlar & Kazançlar
Performans
- • Spot rotation artık client-side (API call yok)
- • Sunucu yükü minimize
- • Anlık spot seçimi
Otomatik Senkronizasyon
- • 10 tetikleyici olay (ayar, içerik, CRUD, sıralama)
- • Observer pattern ile otomatik version++
- • 5 dakikada bir polling kontrolü
- • Manuel işlem yok!
Güvenilirlik
- • Preload invalidation (geçersiz anons çalmaz)
- • Tarih kontrolü (başlangıç/bitiş)
- • Aktif/pasif/arşiv kontrolü
- • Race condition yok (atomic update)
Kullanıcı Deneyimi
- • Ana şube değişiklik yapıyor → Şubeler otomatik güncelliyor
- • Anons ekle/sil/değiştir → 5 dakika içinde tüm şubeler görüyor
- • Gapless playback korunuyor
- • Sıfır manuel müdahale
Test Senaryoları (10 Senaryo)
Versiyon Geçmişi
Spot Çalma Aralığı Sync
Çalma aralığı ve aktif/pasif senkronizasyonu
Global Kapatma
Ana şube tüm şubeleri kapatabilir
Tam Dinamik Senkronizasyon ✅
Observer + API listesi + Version tracking + Preload invalidation + Polling + Client-side rotation