Problem & Cozum
Basit Anlatim (Herkes Icin)
Problem: Bir kullanici tek abonelik ile hem telefondan hem bilgisayardan ayni anda muzik dinleyebiliyor. Bu "hesap paylasimi" anlamina geliyor ve gelir kaybi yasiyor.
Cozum: Sistem otomatik olarak "ayni anda farkli cihazlardan dinleme" tespiti yapacak. Admin panelinden tek tuşla tum premium kullanicilari tarayabilecek. Suistimal edenler raporlanacak.
Teknik Detay
OVERLAP DETECTION ALGORITMASI:
- Play1 bitis > Play2 baslangic
- Play1.device != Play2.device
- Overlap seconds = Play1_end - Play2_start
ABUSE SCORE HESAPLAMA:
- SUM(overlap_seconds) per user
- Score > 300s = Suspicious
- Score > 600s = Abuse Confirmed
Sistem Mimarisi
Queue-Based Scan Flow
Her kullanici ayri job. Memory overflow riski sifir.
Horizon ile 2-3 worker ayni anda calisir.
Her job'in durumu Horizon'da gorunur.
Veritabani Yapisi
muzibu_song_plays
id BIGINT PKsong_id FK -> muzibu_songsuser_id FK -> users (nullable)device_type mobile/desktop/tabletip_address VARCHAR(45)created_at TIMESTAMPmuzibu_abuse_reports
| Field | Type | Aciklama |
|---|---|---|
id |
BIGINT PK | Auto increment |
user_id |
FK -> users | Taranan kullanici |
scan_date |
DATE | Tarama tarihi |
period_start |
DATETIME | Incelenen donem basi |
period_end |
DATETIME | Incelenen donem sonu |
total_plays |
INT | Toplam dinleme sayisi |
overlap_count |
INT | Cakisma sayisi |
abuse_score |
INT | Toplam cakisma saniyesi |
status |
ENUM | clean / suspicious / abuse |
overlaps_json |
JSON | Detayli cakisma verileri |
reviewed_by |
FK -> users (nullable) | Inceleyen admin |
reviewed_at |
DATETIME (nullable) | Inceleme tarihi |
action_taken |
ENUM (nullable) | none / warned / suspended |
notes |
TEXT (nullable) | Admin notlari |
Onerilen Indexler
INDEX (user_id, scan_date) - Kullanici bazli sorgular
INDEX (status, abuse_score) - Filtreleme
INDEX (scan_date) - Tarih bazli listeleme
Olusturulacak Dosyalar
Lokasyon: Modules/Muzibu/database/migrations/tenant/
Tenant database'de calisir (tenant_muzibu_1528d0)
Lokasyon: Modules/Muzibu/app/Models/
Eloquent model with relationships, casts, scopes
Lokasyon: Modules/Muzibu/app/Services/
scanUser(userId, periodDays = 7) - Tek kullanici tara
detectOverlaps(plays) - Cakisma bul
calculateAbuseScore(overlaps) - Skor hesapla
determineStatus(score) - clean/suspicious/abuse
Lokasyon: Modules/Muzibu/app/Jobs/
Queue: abuse-scan
Tries: 3, Backoff: 60s
Timeout: 120s
Lokasyon: Modules/Muzibu/app/Http/Controllers/Admin/
index() - Rapor listesi
startScan() - Toplu tarama baslat
show(id) - Detay + Timeline
review(id) - Admin aksiyonu
Lokasyon: Modules/Muzibu/app/Http/Livewire/Admin/
Filtreleme, pagination, real-time updates
Lokasyon: Modules/Muzibu/resources/views/admin/
index.blade.php - Liste sayfasi
show.blade.php - Detay + Vis.js Timeline
Admin Panel Arayuzu
Ana Sayfa: Abuse Raporlari
| Kullanici | Tarama | Play | Cakisma | Skor | Durum | |
|---|---|---|---|---|---|---|
|
user@example.com
#123
|
29 Ara | 54 | 3 | 842s | ABUSE | |
|
test@test.com
#456
|
29 Ara | 23 | 1 | 312s | SUSPICIOUS |
Detay Sayfasi: User Timeline
Tiklandiginda Vis.js Timeline acilir (v7 raporu gibi). Admin overlapleri gorsel inceler, not ekler, aksiyon alir (warn/suspend).
Vis.js Interactive Timeline
(v7 raporundaki gibi)
Esik Degerleri (Thresholds)
Normal kullanim. Aksiyon yok.
Supheli. Izleme listesine al.
Kesin suistimal. Uyari/Askiya al.
Bu degerler Settings'den ayarlanabilir hale getirilebilir.
Uygulama Adimlari
Migration Olustur
muzibu_abuse_reports tablosu tenant migration olarak
php artisan tenants:migrate ile calistir
Model Olustur
AbuseReport.php with relationships, scopes
Service Olustur
AbuseDetectionService.php - Core detection logic
v7'deki JavaScript mantigi PHP'ye cevirilir
Job Olustur
ScanUserForAbuseJob.php - Queue worker
Horizon'da abuse-scan queue'sunde calisir
Admin Controller & Views
Liste, detay, aksiyon sayfasi
Tabler.io + Livewire + Vis.js Timeline
Route & Menu
Admin menuye "Abuse Reports" ekle
/admin/abuse-reports
Test & Deploy
User #1 ile test, queue calistir
Horizon Yapilandirmasi
config/horizon.php dosyasinda yeni queue tanimla:
'abuse-scan' => [
'connection' => 'redis',
'queue' => ['abuse-scan'],
'balance' => 'auto',
'processes' => 2,
'tries' => 3,
'timeout' => 120,
],
2 process ile paralel calisiyor. Timeout 2 dakika. 3 deneme hakki.
ONAY BEKLIYOR
Yukaridaki plan ve mimari uygunsa "UYGUNDUR" deyin, degisiklik istiyorsaniz belirtin.