SEÇİLEN YAKLAŞIM

Seçenek B: Sadece Player Limit

Device Limit Kaldırılır → Concurrent Playback Tek Başına

Basit
Tek Sistem

Neden Bu Seçenek?

Basit Anlatım (Herkes İçin)

Düşünce: Eğer "aynı anda kaç yerde müzik çaldığını" kontrol edeceksek, "kaç cihazdan giriş yaptığını" kontrol etmeye gerek yok.

Spotify Modeli: Spotify'da istediğin kadar cihazdan giriş yapabilirsin. Ama sadece 1 yerde müzik çalabilirsin. Basit ve kullanıcı dostu.

Sonuç: Device Limit sistemini tamamen kaldırıp, sadece Player Limit kullanmak daha temiz ve anlaşılır bir çözüm.

Teknik Özet (Geliştiriciler İçin)

Kaldırılacaklar
DeviceService.php
user_active_sessions tablosu
session.js polling
LIFO mekanizması
Eklenecekler
PlaybackSessionService.php
active_playback_sessions tablosu
playback-heartbeat.js
Heartbeat mekanizması

Seçenek Karşılaştırması

Seçenek A: Hibrit Sistem

Device Limit + Player Limit
Mevcut sistem korunur
İki katmanlı güvenlik
Karmaşık (2 sistem)
Bakım yükü fazla
Detayları gör

Seçenek B: Sadece Player Limit

Device Limit Kaldırılır
ÖNERİLEN
Tek sistem, basit
Spotify modeli (kanıtlanmış)
Daha az kod, daha az bakım
Kullanıcı dostu UX
Şu an görüntüleniyor

Değişiklik Planı

Kaldırılacaklar (Device Limit)

Backend Dosyaları

Modules/Muzibu/app/Services/DeviceService.php
Modules/Muzibu/app/Http/Controllers/Api/DeviceController.php

Frontend Dosyaları

themes/muzibu/js/player/features/session.js
→ Session polling kaldırılır

Database

user_active_sessions tablosu
→ DROP TABLE veya devre dışı bırak

Settings

auth_device (setting key)
auth_device_limit (setting key)

Eklenecekler (Player Limit)

Backend Dosyaları

Modules/Muzibu/app/Services/PlaybackSessionService.php
Modules/Muzibu/app/Http/Controllers/Api/PlaybackController.php

Frontend Dosyaları

themes/muzibu/js/player/features/playback-session.js
→ Heartbeat sistemi (10s ping)

Database

active_playback_sessions tablosu
subscription_plans.concurrent_streams_limit

API Endpoints

POST /api/playback/start
POST /api/playback/ping
POST /api/playback/stop
GET /api/playback/active

Yeni Sistem Akışı

Login Akışı (Değişen)

Eski (Device Limit)
Login registerSession() LIFO Check Eski Session Sil
Yeni (Player Limit)
Login Session Start Hiçbir Limit Yok

Play Butonu Akışı (Yeni)

Play Tıkla
POST /api/playback/start
Aktif Stream Sayısı?
OK → Çal
Limit Aşıldı?
HATA Modal Göster

Heartbeat Akışı (Yeni)

Müzik Başlar
playback_id oluştur
Her 10 Saniye
POST /api/playback/ping
Pause/Stop
POST /api/playback/stop
30s Timeout
Auto cleanup

Seçenek B Avantajları

Daha Temiz Kod

Tek sistem = daha az kod, daha az bug, daha kolay bakım

Daha İyi UX

Sınırsız giriş, sadece playback sınırlı = Spotify modeli

Daha Az Server Load

Session polling (5dk) kaldırılır, sadece aktif player'lar ping atar

Kullanıcı Deneyimi

  • İstediğin kadar cihazdan giriş yap
  • İstediğin kadar sekmede gözat
  • Telefonda playlist düzenle, PC'de çal
  • Sadece play butonunda limit kontrolü

Geliştirici Deneyimi

  • Tek sistem, tek servis, tek kontrol noktası
  • LIFO karmaşıklığı yok
  • Login token yönetimi yok
  • Session sync problemleri yok

Migration Planı

1

Yeni Sistemi Kur (45dk)

active_playback_sessions tablosu migration
subscription_plans.concurrent_streams_limit kolonu
PlaybackSessionService.php oluştur
PlaybackController.php oluştur
API routes ekle
2

Frontend Entegrasyonu (30dk)

playback-session.js oluştur (heartbeat)
player-core.js → Play/Pause hook ekle
Limit aşıldı modal tasarla
3

Test (20dk)

Tek tab'da normal çalma
2. tab'da play → Limit hatası
Heartbeat timeout (30s)
Pause sonrası yeni stream
4

Eski Sistemi Kaldır (15dk)

session.js → Session polling kaldır
DeviceService.php → Devre dışı bırak (sil değil)
AuthController.php → registerSession() çağrısını kaldır
Settings: auth_device = false yap
Not: Tabloyu hemen silme, 1 hafta bekle, sorun yoksa DROP
Toplam Tahmini Süre: ~2 Saat
(Hibrit sistemden 30dk daha kısa)

Risk Değerlendirmesi

Düşük Riskler

  • Geri Dönüş Kolay: Eski kodu silmiyoruz, devre dışı bırakıyoruz
  • Tenant İzole: Sadece Muzibu (1001) etkilenir
  • Kullanıcı Kaybı Yok: Giriş kısıtlaması kalktığı için UX iyileşir

Dikkat Edilecekler

  • Heartbeat Testleri: Offline/reconnect senaryoları
  • Race Condition: Aynı anda 2 tab play basarsa
  • HLS/Howler: Stream tipi fark etmeksizin çalışmalı

Sonuç

Seçenek B: Sadece Player Limit

Device Limit sistemini kaldırıp sadece Concurrent Playback kullanmak, daha temiz, daha basit ve daha kullanıcı dostu bir çözüm. Spotify'ın yıllardır başarıyla kullandığı model.

~2 saat
Uygulama süresi
Düşük
Risk seviyesi
Yüksek
UX iyileştirme