isPremiumOrTrial() fonksiyonu doğru çalışıyor
Login sonrası şarkı otomatik yeniden yükleniyor
Guest ve normal üye 30s preview alıyor
Trial ve premium üye sınırsız dinliyor
{
"status": "preview",
"preview_duration": 30,
"preview_chunks": 3,
"is_premium": false,
"message": "Kayıt olun, tam dinleyin"
}
isPremium() = false
isTrialActive() = false
isPremiumOrTrial() = false ❌
{
"status": "preview",
"preview_duration": 30,
"is_premium": false,
"message": "Premium'a geçin, sınırsız dinleyin"
}
subscription_id: 5
status: 'active'
has_trial: 1 ✅
trial_ends_at: 2025-12-20 (gelecek) ✅
current_period_end: 2025-12-20
isPremium() = false
isTrialActive() = true ✅
isPremiumOrTrial() = true ✅
{
"status": "ready",
"stream_url": "https://...",
"stream_type": "hls",
"is_premium": true,
"preview_duration": null ✅
}
subscription_id: 2
status: 'active' ✅
has_trial: 0 (direkt premium)
current_period_end: 2026-11-28 (gelecek) ✅
isPremium() = true ✅
isTrialActive() = false
isPremiumOrTrial() = true ✅
{
"status": "ready",
"stream_url": "https://...",
"stream_type": "hls",
"is_premium": true,
"preview_duration": null ✅
}
if (!$user) {
return response()->json([
'preview_duration' => 30,
'is_premium' => false
]);
}
if (!$user->isPremiumOrTrial()) {
return response()->json([
'preview_duration' => 30,
'is_premium' => false
]);
}
return response()->json([
'stream_url' => $hlsUrl,
'is_premium' => true,
// preview_duration YOK! ✅
]);
$activeSubscription = $this->subscriptions()
->where('status', 'active')
->where('current_period_end', '>', now())
->first();
return $activeSubscription ? true : false;
$trialSubscription = $this->subscriptions()
->whereIn('status', ['active', 'trial'])
->where('has_trial', true)
->whereNotNull('trial_ends_at')
->where('trial_ends_at', '>', now())
->first();
return $trialSubscription ? true : false;
return $this->isPremium() || $this->isTrialActive();
// Login başarılı
this.isPreviewBlocked = false; // Flag sıfırla
// Mevcut şarkıyı yeniden yükle
if (this.currentSong && this.currentSong.song_id) {
fetch(`/api/muzibu/songs/${this.currentSong.song_id}/stream`)
.then(data => {
// Şarkı preview_duration=null ile yeniden yüklenir
this.loadAndPlaySong(
data.stream_url,
data.stream_type,
data.preview_duration || null, // Premium ise null!
false
);
});
}
// Sadece preview_duration > 0 ise timer kurulur
if (previewDuration && previewDuration > 0) {
this.fadeOutTimer = setTimeout(() => {
// 25. saniyede fade-out başlar
}, 25000);
this.previewTimer = setTimeout(() => {
// 30. saniyede durdur
this.isPreviewBlocked = true;
this.showToast('Premium\'a geçin!');
}, 30000);
}
// Premium/Trial: previewDuration = null → Timer kurulmaz!
Senaryo: Kullanıcı guest olarak şarkı dinlemeye başladı (30s preview), sonra giriş yaptı.
Beklenen: Giriş yaptıktan sonra mevcut şarkı sınırsız dinlenebilmeli.
Gerçekleşen: Giriş yapmasına rağmen 30s preview devam ediyordu!
✅ Login successful
👤 User: {is_premium: true} ✅
🔓 Preview block removed ✅
🎵 Guest preview: Fade-out başladı ❌
🛑 Guest preview ended - stopping playback ❌
🔍 Sebep: Login yaptıktan sonra MEVCUT ŞARKI hala eski preview_duration=30 değeri ile yüklü kalmıştı!
Yaklaşım: Login/Register başarılı olunca mevcut şarkıyı API'den yeniden yükle.
1. isPreviewBlocked = false ✅
2. Preview timer'ları temizle (previewTimer, fadeOutTimer) ✅
3. Mevcut şarkıyı API'den tekrar fetch et ✅
4. Şarkıyı preview_duration=null ile yeniden yükle ✅
5. Kullanıcının dinlediği pozisyonu koru (currentTime) ✅
6. Çalıyorsa otomatik devam ettir ✅
🎯 Sonuç: Login sonrası şarkı kesintisiz sınırsız dinlenmeye devam ediyor!
| Kullanıcı Tipi | Backend Kontrol | preview_duration | Dinleme Süresi | Durum |
|---|---|---|---|---|
| 🚫 Guest | $user = null |
30 saniye | 30s preview | ✅ PASS |
| 👤 Normal Üye | isPremiumOrTrial() = false |
30 saniye | 30s preview | ✅ PASS |
| 🎁 Trial Üye | isTrialActive() = true |
null | Sınırsız | ✅ PASS |
| 👑 Premium Üye | isPremium() = true |
null | Sınırsız | ✅ PASS |