✅ Subscription Modülü

DOĞRU ANALİZ v2

Tenant-Aware Aktif/Pasif Sistem - SettingsManagement Yaklaşımı

📅 2025-12-05 🎯 SettingsManagement Çalışma Mantığı Anlaşıldı ✅ 3-Layer System

❌ Önceki Yanlış Analiz (v1)

v1'de SettingsManagement'ın nasıl çalıştığını tam anlamamıştım.

Yanlış Düşündüklerim:

  • ❌ "Settings tablosu şişer" → YANLIŞ! (settings central'da, her tenant aynı tanımı kullanır)
  • ❌ "N+1 riski" → YANLIŞ! (Zaten optimize edilmiş, cache var)
  • ❌ "tenants.data JSON daha iyi" → YANLIŞ! (SettingsManagement zaten bu iş için tasarlanmış)

✅ SettingsManagement Nasıl Çalışıyor?

🎯 3 Katmanlı Mimari

1

settings_groups

Konum: CENTRAL DB

Görev: Grup tanımları

Örnek: "Modül Ayarları"

2

settings

Konum: CENTRAL DB

Görev: Setting tanımı + default

Örnek: subscription_enabled

3

settings_values

Konum: TENANT DB

Görev: Tenant'a özel değer

Örnek: true/false

⚡ Nasıl Çalışır?

1️⃣

setting('subscription_enabled') çağrıldı

Helper function devreye girer

2️⃣

CENTRAL DB → settings tablosundan tanım bulunur

key='subscription_enabled', id=123

3️⃣

TENANT DB → settings_values tablosuna bakılır

setting_id=123 için değer var mı?

Değer bulundu → Tenant'ın değeri döner (true/false)

Bulunamazsa → default_value döner

📝 Örnek Senaryo

CENTRAL DB (settings):

id: 123
key: 'subscription_enabled'
default_value: false
type: 'boolean'

TENANT 1001 (Muzibu) - settings_values:

setting_id: 123
value: true ← Muzibu subscription kullanıyor!

TENANT 2 (İxtif) - settings_values:

(kayıt yok) → default_value döner → false

Kod:

// Muzibu'da:
setting('subscription_enabled') // true

// İxtif'te:
setting('subscription_enabled') // false

🎯 Neden SettingsManagement En İyisi?

BU İŞ İÇİN TASARLANMIŞ!

SettingsManagement modülü tam olarak bu senaryolar için yapılmış. Tenant bazında ayar yönetimi = ana görevi!

HER TENANT AYRI DEĞER

settings_values TENANT DB'de olduğu için her tenant kendi değerini saklar. Birbirini etkilemez!

MERKEZI TANIM

settings tablosu CENTRAL'da = Yeni modül eklemek → Tek yerde tanımla, tüm tenant'lar kullanabilir!

ADMIN UI HAZIR!

SettingsManagement zaten admin UI'a sahip. Toggle switch ekle, kullanıcı aktif/pasif etsin!

CACHE + PERFORMANS

setting() helper zaten cache'li, N+1 problemi çözülmüş, optimize edilmiş!

🛠️ Implementation Adımları

1

Setting Group Oluştur (CENTRAL)

Admin Panel → Settings → Groups → Yeni Grup

Grup Adı: "Modül Ayarları"
Slug: "module-settings"
Icon: "fas fa-puzzle-piece"
Aktif: true
2

Setting Oluştur (CENTRAL)

Admin Panel → Settings → Settings → Yeni Setting

Group: "Modül Ayarları"
Label: "Subscription Modülü"
Key: "subscription_enabled"
Type: "boolean"
Default Value: false
Help Text: "Subscription modülünü aktif/pasif et"
3

Tenant 1001 İçin Aktif Et

Muzibu'ya giriş yap → Settings → Modül Ayarları

Subscription Modülü: [ON] ← Toggle switch

// Veya tinker ile:
setting_update('subscription_enabled', true);
4

Route Guard Ekle

// Modules/Subscription/routes/admin.php

Route::prefix('admin/subscription')->group(function () {
  Route::middleware(function ($request, $next) {
    if (!setting('subscription_enabled')) {
      abort(404, 'Module not enabled');
    }
    return $next($request);
  })->group(function () {
    // Subscription routes...
  });
});
5

Menu Guard Ekle

// Admin sidebar

@if(setting('subscription_enabled'))
  <li>
    <a href="{{ route('admin.subscription.index') }}">
      <i class="fas fa-crown"></i> Abonelikler
    </a>
  </li>
@endif

🎯 Sonuç

SettingsManagement Kullan!

Tam olarak bu iş için tasarlanmış, optimize edilmiş, admin UI'ı hazır!

✅ Avantajlar

  • ✅ Zaten var, yeni sistem değil
  • ✅ Tenant-aware (her tenant ayrı değer)
  • ✅ Cache + Performans optimize
  • ✅ Admin UI hazır
  • ✅ setting() helper kullan
  • ✅ Merkezi tanım (central DB)

🎯 Uygulama

  • 1️⃣ Group: "Modül Ayarları" (central)
  • 2️⃣ Setting: "subscription_enabled" (central)
  • 3️⃣ Muzibu: ON, İxtif: OFF (tenant)
  • 4️⃣ Route guard: setting() kontrolü
  • 5️⃣ Menu guard: @if(setting())

💡 Ek Modüller İçin:

Aynı "Modül Ayarları" grubuna yeni setting'ler ekle:

  • • shop_enabled
  • • blog_ai_enabled
  • • advanced_analytics_enabled