Subscription + Trial + Device + Premium - Tek Ortak Mantık
✅ EVET - Kullanıcı üye olunca otomatik başlatılır!
Sebep: Friction azaltma, yüksek conversion
Flow: Kayıt → Trial subscription oluştur → Status: trial
Alternatif YOK: Kullanıcı seçmez, direkt trial verilir
✅ 7 Gün - Trial Planının Cycle Süresinden Alınır
Kaynak: Trial planının tek cycle'ı (7 gün, ₺0.00)
Avantaj: Tek kaynak gerçeği (DRY prensibi)
NOT: Settings'den ALINMAZ (senkronizasyon sorunu olur)
✅ CHECKBOX - is_trial (boolean field)
❌ Slug Yaklaşımı (Reddedildi)
✅ Checkbox Yaklaşımı (Kabul)
Admin Panel:
☑️ Bu bir deneme üyeliğidir (is_trial)
⚠️ Validasyon: Sadece 1 plan is_trial=TRUE olabilir!
✅ users.has_used_trial (boolean field)
Default: false
Trial başlatılınca: TRUE yapılır (ömür boyu)
Kontrol: Kayıt sırasında has_used_trial=TRUE ise trial YOK
✅ 30 SANİYE PREVIEW - Giriş/Çıkış BEKLENİR!
🔴 KRİTİK SORUN: Kullanıcı Çıkış Yapmaz!
✅ ÇÖZÜM: Request-Level Fresh Check
HER müzik stream isteğinde (cache YOK!):
✅ AYNI MANTIK - 30 Saniye Preview
Trial ile aynı: Request-level fresh check
Giriş/çıkış beklenmez: Premium bittiği an → 30 saniye
Ortak kod: isPremium() veya hasActiveSubscription()
✅ Request-Level Check + Event Dispatch
⚠️ SORUN:
✅ ÇÖZÜM: Lazy Check + Event
✅ HİBRİT SİSTEM - Lazy Check + Cron
1. Lazy Check (Ana Güvenlik)
Her istekte kontrol, cron çalışmasa bile güvenli
2. Cron (Yedek Güvenlik)
Günlük toplu temizlik, siteye girmeyen kullanıcılar için
📊 AKIŞ:
🔔 EVENT'LAR:
TrialExpired
Trial süresi doldu
SubscriptionExpired
Premium bitişi
DeviceLimitExceeded
Device limit aşıldı
PaymentFailed
Ödeme başarısız
SubscriptionRenewed
Yenilendi
SubscriptionCancelled
İptal edildi
✅ AVANTAJLAR:
subscription_plans: 18 field ✅
users.has_used_trial: ✅
plans.is_trial: ✅
subscription_plans: 18 field ✅
users.has_used_trial: ✅
plans.is_trial: ✅
subscription_plans: 18 field ✅
users.has_used_trial: ✅
plans.is_trial: ✅
✅ HAZIR DURUM:
🔴 GİRİŞ/ÇIKIŞ BEKLENMEMELİ!
Kullanıcı 5 yıl çıkış yapmaz. Request-level fresh check ZORUNLU!
🟠 CACHE KULLANMA!
isPremium() her çağrıda fresh DB check yapmalı. Cache = Risk!
🟡 CRONSUZ DA ÇALIŞMALI!
Hibrit sistem (Lazy Check + Cron). Cron çalışmasa bile güvenli.
🟢 ORTAK MANTIK!
Trial, Premium, Device → Hepsi aynı Event-Based sistem!