users.subscription_expires_at = Tek Gercek Kaynak
Sorun: Sistemde premium kontrolu icin 6 farkli fonksiyon ve 2 farkli kavram (premium + trial) var. Bu tutarsizlik yaratiyor.
Cozum: TEK bir kaynak: users.subscription_expires_at
Kural: Bu tarih gelecekte ise = Premium. Gecmiste veya NULL ise = Ucretsiz. Trial ayrimi yok.
isPremium()
3 katmanli kontrol: model + fresh DB + subscriptions fallback
isTrialActive()
Subscriptions tablosundan trial kontrolu
isPremiumOrTrial()
isPremium() || isTrialActive()
getSubscriptionData()
SongStreamController - Sadece model degerine bakiyor, fresh DB yok
currentUser.is_premium
currentUser.is_trial
Her yerde is_premium || is_trial kontrolu yapiliyor = 2 degisken
| Dosya | Kullanilan Metod |
|---|---|
| app.blade.php:716 | isPremiumOrTrial() |
| sidebar.blade.php:58,71,77 | isPremium() |
| header.blade.php:685 | isPremiumOrTrial() |
| dashboard.blade.php:35 | isPremiumOrTrial() |
| sidebar-left.blade.php (JS) | currentUser?.is_premium |
users.subscription_expires_at
Gelecekte = Premium
NULL veya Gecmiste = Ucretsiz
Trial ayrimi YOK - subscription_expires_at her seyi kapsar
// app/Models/User.php
/**
* Premium mi? TEK KAYNAK: subscription_expires_at
*/
public function isPremium(): bool
{
// Tenant kontrolu
if (!$this->isMuzibuTenant()) {
return false;
}
// 1. Model degeri (hizli)
if ($this->subscription_expires_at && $this->subscription_expires_at->isFuture()) {
return true;
}
// 2. Fresh DB kontrolu (model stale olabilir)
$freshExpiry = \DB::table('users')
->where('id', $this->id)
->value('subscription_expires_at');
return $freshExpiry && \Carbon\Carbon::parse($freshExpiry)->isFuture();
}
// isTrialActive() - KALDIRILDI
// isPremiumOrTrial() - KALDIRILDI (isPremium() kullan)
// SongStreamController.php
protected function getSubscriptionData($user): array
{
if (!$user) {
return ['is_premium' => false, 'subscription_ends_at' => null];
}
// Fresh DB kontrolu (model stale olabilir)
$expiresAt = \DB::table('users')
->where('id', $user->id)
->value('subscription_expires_at');
$isPremium = $expiresAt && \Carbon\Carbon::parse($expiresAt)->isFuture();
return [
'is_premium' => $isPremium,
'subscription_ends_at' => $expiresAt,
// is_trial KALDIRILDI
];
}
// app.blade.php - muzibuPlayerConfig
currentUser: {
id: {{ $user->id }},
name: "{{ $user->name }}",
is_premium: {{ $user->isPremium() ? 'true' : 'false' }},
subscription_ends_at: "{{ $user->subscription_expires_at?->toIso8601String() }}"
// is_trial KALDIRILDI
}
// Tum JS dosyalarinda:
// ESKI: currentUser?.is_premium || currentUser?.is_trial
// YENI: currentUser?.is_premium
| Dosya | Degisiklik |
|---|---|
| app/Models/User.php | isPremium() sadele, isTrialActive() deprecated, isPremiumOrTrial() kaldir |
| SongStreamController.php | getSubscriptionData() fresh DB ekle, is_trial kaldir |
| Dosya | Degisiklik |
|---|---|
| layouts/app.blade.php:716 | isPremiumOrTrial() -> isPremium() |
| components/header.blade.php:685,759 | isPremiumOrTrial() -> isPremium() |
| dashboard.blade.php:35 | isPremiumOrTrial() -> isPremium() |
| partials/dashboard-content.blade.php:52 | isPremiumOrTrial() -> isPremium() |
| components/sidebar-left.blade.php | is_trial kontrollerini kaldir |
| Dosya | Degisiklik |
|---|---|
| player-core.js | is_premium || is_trial -> is_premium (20+ yer) |
| player-core.js:3208-3212 | is_trial guncelleme kodunu kaldir |
| play-helpers.js | is_premium || is_trial -> is_premium (5 yer) |