Tamamlandı Muzibu

Context Tracking, Browser Detection & Abuse Reports

30 Aralık 2025 - Yapılan Geliştirmeler

Özet

3
Ana Sistem Düzeltildi
12+
Tarayıcı Tespit Edilebilir
%100
Context Yakalama Oranı

1️⃣ Context-Based Play Tracking (source_type / source_id)

Basit Anlatım (Herkes İçin)

Artık her şarkı dinlendiğinde "nereden başlatıldı" bilgisi kaydediliyor. Kullanıcı bir türden mi dinledi? Albümden mi? Playlistten mi? Arama sonuçlarından mı? Bu bilgi abuse (kötüye kullanım) tespiti için kritik öneme sahip.

genre
Tür Sayfası
album
Albüm Sayfası
playlist
Playlist
popular
Popüler Liste

Teknik Detaylar

Frontend: public/themes/muzibu/js/muzibu-store.js
Fonksiyon: setPlayContext() / getPlayContext()
API: POST /api/muzibu/songs/{id}/track-start
Controller: SongStreamController::trackStart()
Tablo: muzibu_song_plays (source_type, source_id kolonları)

Sonuç:

Tarih Toplam Context Var Oran
30 Aralık (Bugün) 30 30 %100
29 Aralık (Öncesi) 126 0 %0

2️⃣ Gelişmiş Tarayıcı Tespiti (Browser Detection)

Basit Anlatım

Önceden Opera, Brave, Vivaldi gibi tarayıcılar hep "Chrome" olarak kaydediliyordu. Çünkü hepsi Chromium tabanlı ve User-Agent'larında "Chrome" yazıyor. Şimdi her tarayıcı doğru ismiyle kaydediliyor.

Tespit Edilen Tarayıcılar

🔵
Edge
🔴
Opera
🦁
Brave
🟣
Vivaldi
📱
Samsung
🟡
Yandex
🟠
UCBrowser
🦊
Firefox
🧭
Safari
🌐
Chrome
📘
IE
Other

Teknik Detaylar

Dosya: Modules/Muzibu/app/Http/Controllers/Api/SongStreamController.php
Metod: detectBrowserFromUA(string $userAgent): string
Mantık: OPR/, Edg/, Brave, Vivaldi önce kontrol edilir, Chrome en son

Geriye Dönük Düzeltme

Veritabanında yanlış "Chrome" olarak kaydedilen 3 Opera kaydı SQL ile düzeltildi:

UPDATE muzibu_song_plays SET browser = 'Opera' WHERE user_agent LIKE '%OPR/%' AND browser = 'Chrome'

3️⃣ Abuse Reports Timeline Düzeltmeleri

Basit Anlatım

Abuse (kötüye kullanım) raporlarında "Dinleme Zaman Çizelgesi" ve "Genel Zaman Çizelgesi" düzgün çalışmıyordu. Gün sekmelerine tıklayınca chart güncellenmiyor, saatler yanlış gösteriliyordu. Tüm bunlar düzeltildi.

Yapılan Düzeltmeler

Timeline Her Zaman Görünür
Önceden sadece overlap varsa gösteriliyordu, şimdi her zaman görünür
Gün Sekmesi Filtreleme
27 Ara, 28 Ara gibi sekmelere tıklayınca timeline o güne göre filtreleniyor
"Tümü" Butonu
Tüm günleri tek seferde görmek için "Tümü" butonu eklendi
Dinamik Zoom
Her gün seçiminde timeline otomatik fit() yapıyor
Yeni Tarayıcı Renkleri
Opera, Brave, Vivaldi, Edge için özel renkler eklendi

Teknik Detaylar

View: Modules/Muzibu/resources/views/admin/abuse-reports/show.blade.php
JS Fonksiyon: filterTimelineByDate(selectedDate)
Kütüphane: vis-timeline (vis.js)

4️⃣ Context Quick Test Script

Basit Anlatım

Context-Based Infinite Queue sistemini hızlıca test etmek için bir script oluşturuldu. Tarayıcı konsolunda çalıştırınca tüm sistemleri kontrol ediyor.

Kullanım:

fetch('/testler/context-quick-test.js').then(r=>r.text()).then(eval)

Test Edilen Özellikler:

  • ✓ Store kontrolü (player, muzibu)
  • ✓ ValidTypes kontrolü ('song' dahil)
  • ✓ playContent fonksiyonları
  • ✓ API endpoint'leri
  • ✓ 10 şarkı hızlı geçiş
  • ✓ Context değişim testi

Dosya Konumu:

public/testler/context-quick-test.js

Yeni Sistem Akış Şeması

┌─────────────────────────────────────────────────────────────────────────────┐
│                        CONTEXT-BASED PLAY TRACKING                          │
└─────────────────────────────────────────────────────────────────────────────┘

  KULLANICI                    FRONTEND                      BACKEND
  ─────────                    ────────                      ───────

  1. Genre/Album/              2. setPlayContext({
     Playlist tıklar    ───────>  type: 'genre',
                                  id: 17,
                                  name: 'Rock'
                               })
                                      │
                                      ▼
                               localStorage + Alpine Store'a kaydedilir
                                      │
  3. Şarkı çalınır      ─────────────┘
                                      │
                                      ▼
                               4. trackSongStart(songId) çağrılır
                                      │
                               5. getPlayContext() ile context alınır
                                      │
                                      ▼
                               6. POST /api/muzibu/songs/{id}/track-start
                                  body: {
                                    source_type: 'genre',  ────────> 7. DB'ye yazılır:
                                    source_id: 17                       muzibu_song_plays
                                  }                                     ├─ source_type
                                                                        └─ source_id
                                      │
                                      ▼
                               8. detectBrowserFromUA() ile tarayıcı tespiti
                                  Opera/Brave/Vivaldi/Edge doğru kaydedilir
                                      │
                                      ▼
                               9. Abuse Detection Service bu verileri kullanır
                                  - Pattern analizi
                                  - Multi-device tespiti
                                  - Bot davranışı analizi

┌─────────────────────────────────────────────────────────────────────────────┐
│                     ABUSE DETECTION DASHBOARD                               │
│                                                                             │
│  /admin/muzibu/abuse-reports/{id}                                          │
│  ┌─────────────────────────────────────────────────────────────────────┐   │
│  │  📊 Dinleme Zaman Çizelgesi (vis-timeline)                          │   │
│  │  ┌─────────────────────────────────────────────────────────────┐    │   │
│  │  │  [Tümü] [27 Ara] [28 Ara] [29 Ara] [30 Ara]  ← Gün Filtreleri│   │   │
│  │  │  ─────────────────────────────────────────────────────────────   │   │
│  │  │  Chrome   ████████░░░░████████░░░░████████░░░░                   │   │
│  │  │  Opera    ░░░░████████░░░░░░░░░░░░░░░░░░░░░░░░                   │   │
│  │  │  Firefox  ░░░░░░░░░░░░████████░░░░░░░░░░░░░░░░                   │   │
│  │  │           04:00    06:00    08:00    10:00    12:00              │   │
│  │  └─────────────────────────────────────────────────────────────┘    │   │
│  └─────────────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────────────┘
                    

Değişen Dosyalar

M Modules/Muzibu/app/Http/Controllers/Api/SongStreamController.php
M Modules/Muzibu/app/Services/AbuseDetectionService.php
M Modules/Muzibu/resources/views/admin/abuse-reports/show.blade.php
A public/testler/context-quick-test.js