MASTER PLAN - Tüm Sorunlara Ortak Çözüm
Request-Level Fresh Check + Event-Based System
Her müzik isteğinde gerçek zamanlı kontrol, durum değişince event fırlat!
| Rapor | Konu | Sonuç |
|---|---|---|
| 1. Trial Stratejisi | Cycle bazında trial → Ayrı trial planı | ✓ Checkbox (is_trial) |
| 2. Trial Checkbox | Slug yerine boolean field | ✓ Tek trial garantisi |
| 3. Trial Yönetimi | Trial planı kim oluşturacak? | ✓ Admin manuel + otomatik atama |
| 4. Manage UI | Cycle'lardan trial field'ı kaldır | ✓ 7 lokasyon temizleme |
| 5. Cron Alternatifi | Cron çalışmazsa ne olur? | ✓ Lazy Check + Cron (Hybrid) |
| 6. Event System | Tüm olaylara ortak dil | ✓ Event-based architecture |
| 7. Realtime Control | Giriş/çıkış beklenmez (5 yıl!) | ✓ Request-level fresh check |
Kayıp: SONSUZ
Kayıp: 3 AY
1. Request-Level Fresh Check (Her müzik isteği)
2. Event-Based System (Durum değişince)
3. Cron Backup (Siteye girmeyenler için)
Stream endpoint'e istek gelir: /api/stream/{song_id}
$user->isPremiumFresh() → Database'den direkt kontrol (cache atlanır)
Trial/Premium bitti mi? → Event fırlat!
TrialExpired / SubscriptionExpired eventactive → expired)Premium/Trial aktifse → HLS stream ver
Değilse → 30 saniye preview
Boolean field, default false, index ekle
Boolean field, default false, unique constraint
Cache KULLANMA! Her seferinde fresh DB check
app/Events/TrialExpired.php (user, subscription)
Email gönder, bildirim at, log tut
Subscription bittiyse event fırlat
isPremium() yerine isPremiumFresh() çağır (cache yok!)
Her segment isteğinde de kontrol et
API route'larına ekle, otomatik kontrol
Manuel olarak: slug=trial, fiyat=₺0.00, 7 gün
7 lokasyon: Cycle card, Edit modal, New modal
RegisterController'da, has_used_trial kontrol et
Siteye girmeyen kullanıcıları temizle
| # | Görev | Dosya | Öncelik |
|---|---|---|---|
| 1 | users tablosuna has_used_trial ekle | database/migrations/tenant/ | YÜKSEK |
| 2 | subscription_plans tablosuna is_trial ekle | database/migrations/tenant/ | YÜKSEK |
| 3 | User.php: isPremiumFresh() ekle | app/Models/User.php | YÜKSEK |
| 4 | TrialExpired event oluştur | app/Events/TrialExpired.php | YÜKSEK |
| 5 | SubscriptionExpired event oluştur | app/Events/SubscriptionExpired.php | YÜKSEK |
| 6 | Listener'lar oluştur (email, bildirim) | app/Listeners/ | YÜKSEK |
| 7 | isPremiumFresh() içine event dispatch | app/Models/User.php | YÜKSEK |
| 8 | Stream endpoint: isPremiumFresh() kullan | Modules/Muzibu/.../StreamController.php | YÜKSEK |
| 9 | Middleware: SubscriptionCheck | app/Http/Middleware/ | YÜKSEK |
| 10 | Admin: Trial plan oluştur | Admin Panel (Manuel) | ORTA |
| 11 | subscription-plan-manage UI temizle | ...subscription-plan-manage-component.blade.php | ORTA |
| 12 | Kayıt: Otomatik trial subscription | app/Http/Controllers/Auth/RegisterController.php | ORTA |
| 13 | Cron job: Yedek temizlik | app/Console/Kernel.php | DÜŞÜK |
| 14 | Test: Tüm akışları test et | Manual + Automated | ORTA |
Her müzik isteğinde isPremiumFresh() çağır → Cache YOK!
Subscription bittiyse → Event fırlat → Listener'lar çalışır
Günlük toplu temizlik (siteye girmeyenler için)