🎯 Muzibu Device System

Final Implementation Plan | 26 Kasım 2025
✅ KARAR:
• Device limit: 1 (varsayılan) - İleride multi-device abonelik eklenebilir
• Login sırasında modal göster: Aktif cihazları listele + Kullanıcı seçsin
• Session kesilince müzik otomatik durur
• Polling YOK! Sadece login kontrolü

📱 Senaryo 1: Login Sırasında Kontrol

1. Kullanıcı login yapmaya çalışıyor
2. Backend: Active session count kontrol eder
3. Eğer count >= device_limit:
→ Modal göster: "Aktif cihazlar"
→ Kullanıcı seçer: Hangi cihazı kapatacak?
→ Backend: O session'ı sil
4. Yeni session oluştur → Login başarılı

Login Modal Mockup:

Login Screen

Cihaz Limitine Ulaştınız

Giriş yapabilmek için bir cihazdan çıkış yapmanız gerekiyor.

💻 Windows - Chrome
IP: 192.168.1.45
Son Erişim: 2 saat önce
Bu Cihazdan Çıkış Yap
📱 Android - Chrome Mobile
IP: 192.168.1.78
Son Erişim: 5 dakika önce
Bu Cihazdan Çıkış Yap
Tüm Cihazlardan Çıkış Yap

🔔 Senaryo 2: Çıkış Yapılan Cihazda Ne Olur?

1. Cihaz A'da müzik çalıyor (09:00 - akşama kadar)
2. Kullanıcı Cihaz B'den login yaptı
3. Cihaz A'nın session'ı silindi
4. Cihaz A: Arka planda session check yapıyor (her 30 saniye)
5. Session yok → Müzik durdur
6. Modal göster: "Başka cihazdan giriş yapıldı"

Çıkış Modal Mockup:

Player Screen

⚠️ Oturumunuz Sonlandırıldı

Başka bir cihazdan giriş yapıldığı için bu cihazdaki oturumunuz sonlandırıldı.

Müzik otomatik olarak durduruldu.

Tamam

📂 Oluşturulacak Dosyalar

1. Tenant1001Service
app/Services/Tenant1001/DeviceService.php
  • getActiveDevices(User $user)
  • getActiveDeviceCount(User $user)
  • checkDeviceLimit(User $user)
  • terminateSession(string $sessionId)
  • terminateAllSessions(User $user)
  • getDeviceInfo(string $userAgent, string $ip)
2. Login Controller Güncelleme
app/Http/Controllers/Auth/LoginController.php
  • Login öncesi device limit kontrol et
  • Eğer limit aşıldıysa → Aktif cihazları döndür
  • Frontend modal gösterir
3. Device Management Endpoint
routes/api.php (Tenant 1001)
  • POST /api/devices/check → Limit kontrol
  • GET /api/devices/active → Aktif cihazlar
  • DELETE /api/devices/{sessionId} → Session sil
  • DELETE /api/devices/all → Tüm session'ları sil
4. Login Modal Component
resources/views/themes/muzibu/components/device-limit-modal.blade.php
  • Aktif cihazları listele (IP, User Agent, Last Activity)
  • "Bu Cihazdan Çıkış Yap" butonları
  • "Tüm Cihazlardan Çıkış Yap" butonu
5. Session Check Component
resources/views/themes/muzibu/components/session-check.blade.php
  • Arka planda session kontrol (her 30 saniye)
  • Session yoksa → Müziği durdur
  • Modal göster: "Başka cihazdan giriş yapıldı"
6. Çıkış Modal Component
resources/views/themes/muzibu/components/session-terminated-modal.blade.php
  • Oturum sonlandırma mesajı
  • "Tamam" butonu → Logout

⚙️ Teknik Detaylar

Session Check (Arka Plan):

setInterval(() => { fetch('/api/session/check') .then(response => { if (response.status === 401) { // Session yok stopMusic(); showSessionTerminatedModal(); } }); }, 30000); // Her 30 saniye

Device Limit Kontrol:

// Tenant1001Service public function checkDeviceLimit(User $user): bool { // Sadece Tenant 1001 için if (tenant()->id !== 1001) { return true; } $limit = $user->device_limit ?? 1; $activeCount = $this->getActiveDeviceCount($user); return $activeCount < $limit; }

Session Silme:

// Session silme DB::table('sessions') ->where('id', $sessionId) ->delete(); // Kullanıcı bir sonraki istekte 401 alır // Frontend logout yapar

🚀 Sonraki Adımlar

Sıralama:
  1. Tenant1001Service oluştur (Backend logic)
  2. API endpoint'leri ekle (Device management)
  3. Login controller güncelle (Device limit kontrol)
  4. Login modal component (Aktif cihazlar)
  5. Session check component (Arka plan kontrol)
  6. Çıkış modal component (Oturum sonlandı)
  7. Test (2 cihazdan giriş dene)
✅ ONAY: Bu plan uygun mu? Başlayalım mı?