Trial + Premium + Tüm Sistem Birleştirme - 3 Tenant Analizi
✅ Users: 8 kullanıcı
✅ Plans: 2 plan
✅ Subscriptions: 1 aktif
Plans: premium-annual, premium-plan
✅ Plans: 2 plan
❌ Subscriptions: 0 kayıt (BOŞ!)
Plans: premium, gold
⚠️ Tablolar var ama kullanılmıyor
✅ Plans: 1 plan
❌ Subscriptions: 0 kayıt (BOŞ!)
Plans: premium (4 cycle)
⚠️ Tablolar var ama kullanılmıyor
Tüm subscription sistemi tek bir merkezden kontrol edilecek. Trial, Premium, Gold, her şey aynı mantıkla çalışacak.
Subscription Database Stratejisi:
Seçenek 1 (Önerilen): Sadece Central DB'de subscription'lar → Tüm tenant'lar Central'a bakar, tenant DB'lerdeki subscription tabloları silinir
Seçenek 2: Her tenant kendi DB'sinde → Tenant 2 ve 1001'deki boş tablolar aktif kullanılır
Hangi strateji seçilirse seçilsin, mantık aynı olacak:
Senaryo 1: Trial Bitti Ama Çıkış Yapmadı
Kullanıcı 7 günlük trial aldı. 8. gün oldu ama uygulama açık, çıkış yapmıyor. Mevcut sistem: Cache 1 saat, kullanıcı sınırsız dinlemeye devam eder!
Senaryo 2: Premium Bitti Ama Uygulama Açık
Aylık premium aldı, 30 gün doldu. Ama mobil uygulama açık, token sürekli yenileniyor. Mevcut sistem: Kullanıcı aylarca bedava dinler!
✅ Çözüm: Request-Level Fresh Check
Her müzik isteğinde (stream endpoint) → Database'den fresh kontrol (cache yok!)
Kontrol mantığı:
Subscription'lar nerede tutulacak? (Central only mı, her tenant kendi DB'sinde mi?) → Bu karar alınmadan devam edilemez!
users tablosuna has_used_trial ekle, subscription_plans tablosuna is_trial ekle
Ayrı bir "Ücretsiz Deneme" planı oluştur (is_trial=true, 7 gün süre)
Stream endpoint için isPremiumFresh() metodu yaz (cache olmadan direkt DB kontrolü)
Tüm event'leri oluştur (TrialStarted, TrialExpired, SubscriptionExpired...) ve listener'ları bağla
Dakikada 1 kontrol: Trial ve Premium biten subscription'ları bul, status güncelle, event fırlat
Tüm senaryoları test et (trial start, trial expire, premium buy, premium expire, cancel, renew...)
Mantık: Tüm tenant'lar Central DB'ye bakar
Avantaj: Tek merkezden yönetim, kolay backup
Dezavantaj: Tenant isolation biraz zayıflar
Aksiyon: Tenant 2 ve 1001'deki subscription tabloları silinir
Mantık: Her tenant kendi DB'sinde subscription tutar
Avantaj: Tam isolation, tenant data ayrı
Dezavantaj: Global rapor çıkarmak zor
Aksiyon: Tenant 2 ve 1001 subscription tabloları aktif kullanılır