FINAL PLAN v8 ONAY BEKLIYOR

Muzibu B2B - Abuse Detection System

Queue-based Concurrent Streaming Detection

29 Aralik 2025 | Tum kararlar ve mimari final

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

Admin Buton
"Tarama Baslat"
Premium Users
Active subscriptions
Queue Jobs
1 job per user
Horizon
Paralel isleme
abuse_reports
Sonuclar kaydedilir
Veri Yigilmasi Yok

Her kullanici ayri job. Memory overflow riski sifir.

Paralel Islem

Horizon ile 2-3 worker ayni anda calisir.

Izlenebilirlik

Her job'in durumu Horizon'da gorunur.

Veritabani Yapisi

MEVCUT

muzibu_song_plays

id BIGINT PK
song_id FK -> muzibu_songs
user_id FK -> users (nullable)
device_type mobile/desktop/tablet
ip_address VARCHAR(45)
created_at TIMESTAMP
YENI TABLO

muzibu_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

MIGRATION create_muzibu_abuse_reports_table.php

Lokasyon: Modules/Muzibu/database/migrations/tenant/

Tenant database'de calisir (tenant_muzibu_1528d0)

MODEL AbuseReport.php

Lokasyon: Modules/Muzibu/app/Models/

Eloquent model with relationships, casts, scopes

SERVICE AbuseDetectionService.php

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

JOB ScanUserForAbuseJob.php

Lokasyon: Modules/Muzibu/app/Jobs/

Queue: abuse-scan

Tries: 3, Backoff: 60s

Timeout: 120s

CONTROLLER AbuseReportController.php

Lokasyon: Modules/Muzibu/app/Http/Controllers/Admin/

index() - Rapor listesi

startScan() - Toplu tarama baslat

show(id) - Detay + Timeline

review(id) - Admin aksiyonu

LIVEWIRE AbuseReportTable.php

Lokasyon: Modules/Muzibu/app/Http/Livewire/Admin/

Filtreleme, pagination, real-time updates

VIEWS abuse-reports/*.blade.php

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

Son Tarama: 5 dk once
156
Taranan
142
Temiz
11
Suphe
3
Suistimal
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)

0-300s
CLEAN

Normal kullanim. Aksiyon yok.

301-600s
SUSPICIOUS

Supheli. Izleme listesine al.

600s+
ABUSE

Kesin suistimal. Uyari/Askiya al.

Bu degerler Settings'den ayarlanabilir hale getirilebilir.

Uygulama Adimlari

1

Migration Olustur

muzibu_abuse_reports tablosu tenant migration olarak

php artisan tenants:migrate ile calistir

2

Model Olustur

AbuseReport.php with relationships, scopes

3

Service Olustur

AbuseDetectionService.php - Core detection logic

v7'deki JavaScript mantigi PHP'ye cevirilir

4

Job Olustur

ScanUserForAbuseJob.php - Queue worker

Horizon'da abuse-scan queue'sunde calisir

5

Admin Controller & Views

Liste, detay, aksiyon sayfasi

Tabler.io + Livewire + Vis.js Timeline

6

Route & Menu

Admin menuye "Abuse Reports" ekle

/admin/abuse-reports

7

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.

UYGUNDUR
DEGISIKLIK