Backend'de 3/3 kuralı devre dışı ama Frontend'de hatalı error handling var!
Herhangi bir API hatası (403, 401, 500, network error) → "Günlük limit doldu" mesajı gösteriyor.
3/3 günlük limit kontrolü tamamen yorum satırına alınmış:
// ⚠️ 3/3 KURAL DEVRE DIŞI (Disable - Silme!)
// if (!$user->canPlaySong()) {
// return response()->json([
// 'status' => 'limit_exceeded',
// 'message' => 'Günlük 3 şarkı limitiniz doldu',
// 'played_today' => $user->getTodayPlayedCount(),
// 'limit' => 3,
// 'remaining' => 0,
// 'is_premium' => $user->isPremium(),
// ], 200);
// }
Sonuç: Backend ASLA status: 'limit_exceeded' dönmüyor.
NOT: 3/3 günlük limit kontrolü artık YAPILMIYOR. Sadece 30 saniye preview kuralı var.
const response = await fetch(`/api/muzibu/songs/${song.song_id}/stream`);
// 🔐 403/401 Check: Backend auth/limit hatası
if (!response.ok) {
// Play limits component'ine bildir (modal aç!)
const playLimitsComponent = Alpine.$data(document.querySelector('[x-data*="playLimits"]'));
if (playLimitsComponent) {
playLimitsComponent.limitExceeded = true;
playLimitsComponent.showLimitModal = true;
playLimitsComponent.remainingPlays = 0;
}
this.showToast('Günlük limit doldu', 'error'); // ❌ HER HATA İÇİN GÖSTERIYOR!
return;
}
// ✅ DOĞRU YAKLAŞIM:
const response = await fetch(`/api/muzibu/songs/${song.song_id}/stream`);
const data = await response.json();
// Backend'den gelen status'e göre davran
if (data.status === 'limit_exceeded') {
// SADECE limit aşıldığında modal göster
this.showToast('Günlük limit doldu', 'error');
return;
}
if (data.status === 'preview') {
// 30 saniye preview modeli
this.isPreview = true;
this.previewDuration = data.preview_duration;
}
trackProgress() endpoint hala muzibu_song_plays tablosuna kayıt yazıyor.
// Her 60+ saniye dinlemede kayıt ekle
\DB::table('muzibu_song_plays')->insert([
'song_id' => $songId,
'user_id' => auth()->id(),
'ip_address' => $request->ip(),
'created_at' => now(),
]);
return response()->json([
'remaining' => auth()->user()->getRemainingPlays() // 3 - play_count
]);
BİLGİ Bu tracking yapılabilir (analitik için), ama frontend'de kullanılmamalı.
Yapılacak:
data.status kontrolü yapstatus === 'limit_exceeded' ise modal göster// GÜNCEL KOD:
try {
const response = await fetch(`/api/muzibu/songs/${song.song_id}/stream`);
if (!response.ok) {
// ❌ Genel hata mesajı göster
this.showToast('Şarkı yüklenemedi', 'error');
return;
}
const data = await response.json();
// Backend'den ASLA gelmeyecek çünkü 3/3 kural yok
// if (data.status === 'limit_exceeded') {
// this.showToast('Günlük limit doldu', 'error');
// return;
// }
// 30 saniye preview kontrolü
if (data.status === 'preview') {
this.isPreview = true;
this.previewDuration = data.preview_duration || 30;
}
// Şarkıyı çal...
} catch (error) {
this.showToast('Bağlantı hatası', 'error');
}
3/3 günlük limit kuralı artık yok. "Günlük Limit Doldu" modalı kullanılmıyor.
Seçenekler:
ÖNERİ Seçenek B: Bırak ama frontend'de kullanma.
Bu endpoint şu anda getRemainingPlays() dönüyor (3 - play_count).
Seçenekler:
remaining dönmeremaining: -1 dön (sınırsız demek)DİKKAT Frontend bu endpoint'i çağırıyor mu kontrol et!
data.status'e göre davranır!response.ok kontrolünü düzelt (muzibu-player.js:932-943)