Tüm Bilgiler Tek Sayfada - Master Plan + Settings + Kullanıcı Durumları + Device Hierarchy
Stratejik kararlar + Settings yaklaşımı
auth_subscription, auth_device_limit
30 saniye, 7 gün, otomatik trial
Guest, Trial, Premium, Expired
User → Plan → Setting
Tüm önemli noktalar tek bakışta
❌ Reddedilen: tenants.data JSON
✅ Kabul: SettingsManagement
💡 3-Layer System
Ücretli Üyelik Sistemi (Ana Anahtar - Trial Dahil)
Setting ID
211
Type
select
Values
0 / 1
Muzibu Status
1 (AKTİF)
💡 Önemli Not:
Bu ayar 1 ise → Trial sistemi de otomatik aktif! Ayrı trial_enabled ayarı YOK!
Cihaz Limit Kontrolü (Global Fallback)
Setting ID
212
Type
number
Default
1
Önerilen
1-3 arası
user.device_limit → plan.device_limit → auth_device_limit (setting)
💡 Detaylı Bilgi:
Detaylı hiyerarşi için Device Limit Hierarchy bölümüne bak
Minimal yaklaşım gereği sadece 2 ayar yeterli. Diğerleri gereksiz veya başka modüllerin sorumluluğunda:
Abonelik yoksa veya biterse müzik 30 saniye çalışır (Guest & Expired kullanıcılar)
✅ Neden Hardcode?
Bu değer değişmeyecek, ayar olarak yönetmeye gerek yok. Kullanıcı: "muzibu 30 saniye kuralı kalıcı değiştirmeye gerek yok. hardcode olsun"
Trial süresi → Trial plan'ın billing_cycles JSON'ından alınır (DRY prensibi)
💡 DRY Prensibi (Don't Repeat Yourself):
Plan zaten bu bilgiyi tutuyor, ayrı bir setting ile duplicate etmeye gerek yok!
Kayıt sonrası otomatik trial subscription oluşturulur (Friction azalt → Conversion artır)
✅ ULTIMATE PLAN Kararı - Friction Azalt:
Kullanıcı seçim yapmasın, form doldurmasın, onay vermesin → Direkt trial ver! Böylece kullanıcı hemen premium deneyimi yaşar ve conversion artar.
Kayıt olmamış, siteyi gezinen kullanıcı
Dinleme:
30 saniye
Özellikler:
Playlist ❌ | Favori ❌
CTA:
"Sınırsız dinlemek için üye ol!"
Yeni kayıt olmuş, 7 günlük deneme süresi aktif
Dinleme:
Sınırsız (7 gün)
Özellikler:
Playlist ✅ | Favori ✅
CTA:
"X gün kaldı, Premium'a geç!"
Ödeme yapmış, aktif premium aboneliği var
Dinleme:
Sınırsız (Ömür boyu)
Özellikler:
TÜM Özellikler ✅
CTA:
"Premium üyesiniz, keyifle dinleyin!"
Trial veya Premium süresi dolmuş, ödeme yapılmamış
Dinleme:
30 saniye
Özellikler:
Playlist ❌ | Favori ❌
CTA:
"Aboneliğiniz sona erdi! HEMEN YENİLE!"
| Durum | Dinleme | Süre | Playlist | CTA |
|---|---|---|---|---|
| 👤 GUEST | 30 saniye | - | ❌ | Üye ol |
| 🆓 TRIAL | Sınırsız | 7 gün | ✅ | Premium'a geç |
| 👑 PREMIUM | Sınırsız | Ömür boyu | ✅ | Keyifle dinle |
| ⏰ EXPIRED | 30 saniye | - | ❌ | HEMEN YENİLE! |
💡 Mantık:
Üstten alta inerken ilk NULL OLMAYAN değer kullanılır. NULL ise bir sonraki katmana geç.
⚠️ Önemli:
users.device_limit field'i zaten database'de mevcut, yeni migration gerekmez!
user.device_limit: NULL
plan.device_limit: 3 ⬅️
auth_device_limit: 1 (ignored)
SONUÇ: 3 cihaz
user.device_limit: 5 ⬅️
plan.device_limit: 3 (ignored)
auth_device_limit: 1 (ignored)
SONUÇ: 5 cihaz
user.device_limit: NULL
plan.device_limit: NULL
auth_device_limit: 1 ⬅️
SONUÇ: 1 cihaz
user.device_limit: 1 (BAN) ⬅️
plan.device_limit: 5 (ignored)
auth_device_limit: 1 (ignored)
SONUÇ: 1 cihaz (kısıtlı)
user.device_limit: 999 (TEST) ⬅️
plan.device_limit: 3 (ignored)
auth_device_limit: 1 (ignored)
SONUÇ: 999 cihaz
user.device_limit: NULL
plan.device_limit: 10 ⬅️
auth_device_limit: 1 (ignored)
SONUÇ: 10 cihaz
1️⃣ user.device_limit
Öncelikli (VIP/Test/Ban)
2️⃣ plan.device_limit
Normal akış (çoğu user)
3️⃣ auth_device_limit
Fallback (son çare)
is_trial=true, 7 günlük cycle, price=0
createTrialForUser(), getDeviceLimit(), checkAccess() metodları
Her request'te fresh check, stale data yok
SubscriptionExpired, TrialEnding events + listeners
Günlük expire check, status update
4 durum test, device limit test, expire test