Muzibu - Eşzamanlı Dinleme Engelleme & Cihaz Takip Sistemi
Aynı hesabın farklı cihazlarda aynı anda müzik dinlemesini tespit edip engellemek. Hesap paylaşımını önlemek.
Kullanıcı "müzik donuyor" dediğinde cihaz/bağlantı verisiyle kanıt sunmak. Bizi suçlayamasınlar.
song_plays'deki tekrarlı cihaz bilgilerini device_profiles'a taşıyarak veri tekrarını önlemek.
Hangi cihazlardan dinleniyor, eski cihaz uyarıları, tarayıcı dağılımı gibi analizler.
song_plays: ├── id ├── song_id ├── user_id ├── device_profile_id ├── ip_address ← TEKRAR ├── user_agent ← TEKRAR ├── device_type ← TEKRAR ├── browser ← TEKRAR ├── platform ← TEKRAR ├── listened_duration ├── was_skipped └── ...
Her şarkı çalışında aynı cihaz bilgileri tekrar tekrar kaydediliyor.
device_profiles: ├── device_profile_id ├── fingerprint (unique) ├── user_id ├── user_agent ← YENİ ├── device_type ← YENİ ├── browser, browser_version ├── platform, platform_version ├── device_memory, cpu_cores ├── screen_resolution ├── is_touch, is_mobile └── ip_address song_plays: ├── id ├── song_id ├── user_id ├── device_profile_id → FK ├── ip_address (o anki) ├── listened_duration ├── was_skipped └── ... (cihaz bilgileri YOK)
Önemli: Eski song_plays verileri SİLİNMEYECEK. Sadece yeni kayıtlarda cihaz bilgileri tutulmayacak.
// SongStreamController::trackStart() $activePlay = SongPlay::where('user_id', $userId) ->whereNull('ended_at') ->where('device_profile_id', '!=', $currentDeviceProfileId) ->where('created_at', '>', now()->subMinutes(5)) ->first(); if ($activePlay) { return response()->json([ 'error' => 'concurrent_streaming', 'message' => 'Bu hesap başka bir cihazda aktif olarak müzik dinliyor.', 'device' => $activePlay->deviceProfile?->summary ], 409); }