✅ Subscription Settings

FINAL v4

Minimal & Basit - Sadece 2 Ayar

📅 2025-12-05 🎯 Mevcut auth_ Ayarları Kullanılacak ✅ 30 Saniye Hardcode

📜 Versiyon Geçmişi

❌ v1: Yanlış analiz (tenants.data önerildi)

SettingsManagement çalışma mantığı anlaşılmamıştı

⚠️ v2: SettingsManagement anlaşıldı ama...

Sadece 1 ayar (subscription_enabled) önerilmişti

📋 v3: 8 ayar önerildi

Çok fazla! Payment gateway, test mode, grace period... Gereksiz karmaşık

✅ v4: FINAL (Bu versiyon)

Sadece 2 ayar + 30 saniye hardcode = Basit & Temiz!

✅ FINAL AYARLAR (2 Adet)

1

auth_subscription

Ücretli Üyelik Sistemi (Ana Anahtar)

Setting ID

211

Type

select

Values

0 / 1

Muzibu

1 (AKTİF)

📋 Ne Yapar?

  • 1 (Açık): Subscription modülü aktif, trial otomatik başlar, premium kontrolleri çalışır
  • 0 (Kapalı): Subscription modülü tamamen kapalı, herkes sınırsız kullanır

💡 Önemli:

Bu ayar 1 ise → Trial da otomatik aktif! Ayrı trial_enabled ayarı YOK!

2

auth_device_limit

Cihaz Limit Kontrolü

Setting ID

212

Type

number

Default

1

Önerilen

1-3 arası

📋 Ne Yapar?

  • 📱 Global Setting: Tüm planlar için geçerli (trial da, premium da)
  • 🔢 Plan Override: Plan'da device_limit field varsa o önceliklidir

💡 Mantık:

Plan'da device_limit yoksa → auth_device_limit kullanılır (fallback)

🔧 Hardcode Değerler (Settings'e GİRMEYEN)

🎵

30 Saniye Preview

Abonelik yoksa/biterse müzik 30 saniye çalışır

// Sabit değer - Kod içinde
const PREVIEW_DURATION = 30; // saniye

// Veya
config('subscription.preview_duration', 30);

✅ Neden Hardcode?

Bu değer değişmeyecek, ayar olarak yönetmeye gerek yok, karmaşıklık yaratır

⏱️

7 Gün Trial

Trial süresi → Trial plan'ın cycle'ından alınır

// Trial plan'dan al
$trialPlan = SubscriptionPlan::where('is_trial', true)->first();
$days = $trialPlan->billing_cycles['7-gunluk']['duration_days'];

💡 Neden Settings'e GİRMEZ?

Plan zaten bu bilgiyi tutuyor, duplicate etmeye gerek yok (DRY prensibi)

🚀

Trial Otomatik Başlar

Kayıt → Trial subscription oluştur (ULTIMATE PLAN kararı)

// Kayıt sonrası
if (setting('auth_subscription')) {
  SubscriptionService::createTrialForUser($user);
}

✅ Neden Hardcode?

ULTIMATE PLAN kararı: Friction azalt, conversion artır → Otomatik başlamalı!

💻 Kod Kullanımı

Route Guard

// Subscription route'ları
Route::prefix('admin/subscription')->group(function () {
  Route::middleware(function ($request, $next) {
    if (!setting('auth_subscription')) {
      abort(404);
    }
    return $next($request);
  })->group(function () {
    // Routes...
  });
});

Menu Guard

// Admin sidebar
@if(setting('auth_subscription'))
  <li>
    <a href="/admin/subscription">
      <i class="fas fa-crown"></i> Abonelikler
    </a>
  </li>
@endif

Service Kontrolü

public function canStreamFullSong(User $user): bool
{
  // Subscription kapalıysa herkes dinler
  if (!setting('auth_subscription')) {
    return true;
  }

  // Açıksa subscription kontrolü
  return $user->hasActiveSubscription();
}

public function getPreviewDuration(): int
{
  return 30; // Hardcode
}

📊 ÖZET

✅ Settings (2 Adet)

  • 1. auth_subscription (0/1)
  • 2. auth_device_limit (number)

🔧 Hardcode (3 Adet)

  • 1. 30 saniye preview
  • 2. 7 gün trial (plan'dan)
  • 3. Otomatik trial başlatma

🎯 Sonuç

  • Basit: Sadece 2 ayar, karmaşık değil
  • Minimal: Gereksiz ayarlar yok (payment, test mode, grace period...)
  • Tenant-Aware: Her tenant kendi ayarını yönetir
  • Mevcut Sistem: Yeni ayar oluşturmaya gerek yok, auth_ prefix'li ayarlar kullanılacak