⚙️ Nasıl Çalışacak?
1. Database Migration
subscription_plans tablosuna yeni field:
is_trial BOOLEAN DEFAULT FALSE
2. Admin Panel'de Checkbox
Plan oluştururken/düzenlerken checkbox:
<input type="checkbox" wire:model="inputs.is_trial">
☑️ Bu bir deneme üyeliğidir
3. Validasyon (SADECE 1 TRIAL)
Checkbox işaretlenirse, sistem kontrol eder:
// Başka trial planı var mı?
$existingTrial = SubscriptionPlan::where('is_trial', true)
->where('id', '!=', $this->planId)
->first();
if ($existingTrial) {
// HATA: Zaten bir trial planı var!
// Veya otomatik diğerini FALSE yap
}
4. Sistem Trial Planını Bulma
Kayıt olunca sistem trial planını bulur:
$trialPlan = SubscriptionPlan::where('is_trial', true)
->where('is_active', true)
->first();
if ($trialPlan) {
// Trial subscription oluştur
}
💡 Avantaj:
Slug yerine is_trial kullanmak:
- Daha net ve anlaşılır
- Hata yapma riski yok
- Validasyon kolay (sadece 1 true olabilir)
- Database index eklenebilir (performans)
🛡️ Validasyon Senaryoları
Senaryo 1: İkinci Trial Planı Oluşturmaya Çalışıyorsun
Durum: Zaten "Trial" planı var (is_trial = true)
Yeni Plan: "Premium Trial" oluşturuyorsun, checkbox işaretliyorsun
✅ Sistem:
- Yaklaşım A: Hata mesajı: "Zaten bir deneme planı var!"
- Yaklaşım B: Eski "Trial" planının is_trial'ını FALSE yap, yeniye TRUE ver
Öneri: Yaklaşım B daha kullanıcı dostu!
Senaryo 2: Mevcut Trial Planının Checkbox'ını Kaldırıyorsun
Durum: "Trial" planı var (is_trial = true)
İşlem: Checkbox'ı kaldırıyorsun (FALSE yapıyorsun)
⚠️ Sistem:
- Uyarı göster: "Bu planın deneme üyeliği durumu kaldırılacak. Emin misiniz?"
- Onaylarsa is_trial = FALSE yap
- Artık sistemde hiç trial planı yok!
🗄️ Database Yapısı
Migration:
Schema::table('subscription_plans', function (Blueprint $table) {
$table->boolean('is_trial')
->default(false)
->after('is_active')
->comment('Bu plan deneme üyeliği mi?');
// Performans için index
$table->index('is_trial');
});
Örnek Veri:
| id | title | slug | is_trial | is_active |
|----|-----------|----------|----------|-----------|
| 1 | Trial | trial | TRUE | TRUE |
| 2 | Premium | premium | FALSE | TRUE |
| 3 | Gold | gold | FALSE | TRUE |
💡 Not:
Sadece 1 plan is_trial = TRUE olabilir. Sistem bunu garanti etmeli (validasyon + unique index).