v2 - User Trial Field Eklendi

📊 Subscription Manage Component - Yeni Sistem Analizi

Admin panelden manuel abonelik oluşturma sayfasını yeni dinamik cycle sistemine uyarlama
📅 2025-12-05 🎯 Tenant: muzibu.com 👤 Admin Subscription Manage 🆕 v2: User has_used_trial field eklendi

🆕 v2 Güncellemesi

Yeni Gereksinim: Trial subscription oluşturulduğunda User tablosundaki has_used_trial field'i de güncellenmeli!

Mantık:

  • ✅ Eğer has_trial = true ise
  • ✅ User'ın has_used_trial = true yapılmalı
  • ✅ Böylece kullanıcı bir daha trial kullanamaz
  • ✅ Frontend'te trial butonu gizlenir

🔴 Mevcut Durum - Sorunlar

❌ Legacy Billing Cycle

Component hala eski billing_cycle enum kullanıyor (monthly, yearly...)

Sorun: Yeni dinamik cycle sistemi (15 gün, 45 gün, deneme-3-gun...) desteklenmiyor!

❌ Cycle Metadata Eksik

cycle_key ve cycle_metadata field'leri tam kullanılmıyor

Sorun: Seçilen cycle'ın label, badge, promo_text bilgileri kaydedilmiyor!

❌ Status Eksiklikleri

View'da paused ve pending_payment status'leri var ama component'te tam desteklenmiyor

Sorun: Abonelik duraklatma ve ödeme bekleme senaryoları eksik!

❌ Trial Plan Mantığı Yok

Plan'ın is_trial field'i kontrol edilmiyor

Sorun: Deneme planı seçildiğinde otomatik trial mantığı çalışmıyor!

❌ Hardcoded Currency

currency her zaman 'TRY' olarak hardcoded

Sorun: Plan'ın currency field'i kullanılmıyor (USD/EUR/TRY desteği yok)!

YENİ

❌ User has_used_trial Güncellenmemiş

Trial subscription oluşturulduğunda User->has_used_trial güncellenmiyor

Sorun: Kullanıcı manuel trial verildikten sonra tekrar trial alabilir!

✅ Yeni Sistem - Dinamik Cycle Mimarisi

🔄 Sistem Akışı

1

Admin Plan Seçer

Plan seçildiğinde plan'ın billing_cycles JSON field'inden tüm cycle'lar çekilir

2

Cycle Seçimi

Admin dropdown'dan bir cycle seçer (örn: "12-aylik")

3

Cycle Metadata Kaydı

Seçilen cycle'ın TÜM bilgileri cycle_metadata field'ine JSON olarak kaydedilir

4

Tarih Hesaplaması

Başlangıç tarihi + duration_days = Bitiş tarihi

5

Trial Kontrolü

Eğer cycle'da trial_days varsa veya plan is_trial=true ise trial aktif edilir

6
YENİ

User has_used_trial Güncelleme

Eğer has_trial = true ise:

$user->has_used_trial = true set edilir

✅ User database'de update yapılır

✅ Kullanıcı artık tekrar trial alamaz

📋 Yapılacaklar - Component Güncellemesi

1

updatedSubscriptionPlanId() Güncelleme

Plan seçildiğinde cycles çekme, currency set etme, is_trial kontrolü

2

updatedCycleKey() İyileştirme

Cycle seçildiğinde price, duration, trial_days yükleme

3

save() Metodu Güncelleme

cycle_key, cycle_metadata, currency, trial field'lerini doğru kaydetme

4

View: Cycle Dropdown Güncelleme

Badge, promo_text, compare_price gösterme

5

Yeni Property'ler Ekle

$currency, $selected_cycle_metadata

6

Currency Symbol Dinamik

TRY → ₺, USD → $, EUR → €

7
YENİ ADIM

save() - User has_used_trial Güncelleme

Ne Yapılacak:

  • ✅ Subscription kaydedildikten SONRA
  • ✅ Eğer $this->has_trial === true ise:
  • ✅ User'ı database'den çek: $user = User::find($this->user_id)
  • ✅ User'ın has_used_trial field'ini güncelle:
    $user->update(['has_used_trial' => true]);
  • ✅ Böylece kullanıcı artık frontend'te trial butonu göremez
  • ⚠️ SADECE YENİ SUBSCRIPTION İÇİN! Edit'te bu işlem yapılmamalı

Kod Örneği:

if (!$this->subscriptionId) { // Sadece yeni kayıt
    Subscription::create($data);
    
    // Trial kullanıldıysa user'ı işaretle
    if ($this->has_trial) {
        User::where('id', $this->user_id)
            ->update(['has_used_trial' => true]);
    }
}

🧪 Test Senaryoları

Test 1: Normal Plan (12 Aylık)

  • ✅ Kullanıcı seç
  • ✅ Plan seç (Premium - 12 Aylık)
  • ✅ has_trial = false olsun
  • ✅ Kaydet
  • ✅ User'ın has_used_trial değişmemeli (false kalmalı)
GÜNCEL

Test 2: Trial Plan

  • ✅ Plan seç (is_trial = true)
  • ✅ has_trial checkbox aktif
  • ✅ Kaydet
  • User'ın has_used_trial = true olmalı!
  • ✅ Database'de kontrol et: SELECT has_used_trial FROM users WHERE id=X
GÜNCEL

Test 3: Edit (Mevcut Subscription)

  • ✅ Mevcut subscription'ı aç (edit)
  • ✅ has_trial'ı false→true değiştir
  • ✅ Kaydet
  • User'ın has_used_trial DEĞİŞMEMELİ!
  • ✅ Sadece yeni kayıtta trial işaretleme yapılır

Test 4: Multiple Trial Engelleme

  • ✅ User'a trial subscription ver
  • ✅ User'ın has_used_trial = true olsun
  • ✅ Frontend'te trial butonu gizlenmeli
  • ✅ User tekrar trial alamamalı

📌 v2 Özet - Kritik Değişiklikler

✅ Eklenenler

  • cycle_key field
  • cycle_metadata field
  • • Dinamik currency
  • • Trial plan mantığı
  • User has_used_trial güncelleme

❌ Kaldırılanlar

  • • Legacy billing_cycle enum
  • • Hardcoded 'TRY' currency
  • • Manuel subscription_number

⚡ v2 Yenilikler

  • • User trial tracking
  • • Multiple trial engelleme
  • • Edit'te trial koruması