📊 Subscription Sistem Analizi

📅 Tarih: 2025-11-27 04:00 | 🎯 Tenant: Muzibu (1001) | 👤 Analiz: Database & Component Yapısı

🗄️ Database Tabloları

1. subscription_plans (Abonelik Planları)

Primary Key: subscription_plan_id

Açıklama: Sistemde sunulan abonelik planlarını tanımlar (Premium, Starter, vb.)

Kolon Tip Açıklama
title JSON Çoklu dil plan adı {"tr":"Premium", "en":"Premium"}
description JSON Çoklu dil açıklama
slug VARCHAR URL dostu tanımlayıcı (premium-plan)
price_monthly DECIMAL(12,2) Aylık fiyat (₺)
price_yearly DECIMAL(12,2) Yıllık fiyat (₺)
compare_price_monthly DECIMAL(12,2) İndirim öncesi aylık fiyat
compare_price_yearly DECIMAL(12,2) İndirim öncesi yıllık fiyat
features JSON Plan özellikleri array ["Sınırsız dinleme", "HD kalite"]
trial_days INTEGER Deneme süresi (gün)
device_limit INTEGER Aynı anda kullanılabilecek cihaz sayısı
is_featured BOOLEAN Öne çıkan plan mı?
is_active BOOLEAN Aktif/Pasif durum

2. subscriptions (Kullanıcı Abonelikleri)

Primary Key: subscription_id

Açıklama: Kullanıcıların aldığı aboneliklerin kayıtları

Kolon Tip İlişki Açıklama
customer_id BIGINT → users.id Düzeltildi Aboneliği satın alan kullanıcı
plan_id BIGINT → subscription_plans.subscription_plan_id Düzeltildi Seçilen abonelik planı
subscription_number VARCHAR - Benzersiz abonelik numarası (SUB-XXX)
status ENUM - active, trial, paused, cancelled, expired, pending_payment
billing_cycle ENUM - monthly, yearly
price_per_cycle DECIMAL(12,2) - Dönem başına ödenen fiyat
started_at TIMESTAMP - Abonelik başlangıç tarihi
current_period_end TIMESTAMP - Mevcut dönem bitiş tarihi
auto_renew BOOLEAN - Otomatik yenileme açık mı?

3. users (Kullanıcılar)

Primary Key: id

Açıklama: Sistemdeki tüm kullanıcılar (müşteriler dahil)

⚠️ Tespit Edilen Sorunlar

1. Yanlış Foreign Key Referansları KRİTİK

Sorun:

  • customer_idshop_customers tablosuna bakıyordu (YANLIŞ!)
  • plan_idshop_subscription_plans tablosuna bakıyordu (YANLIŞ!)

Çözüm:

ALTER TABLE subscriptions DROP FOREIGN KEY shop_subscriptions_customer_id_foreign; ALTER TABLE subscriptions ADD CONSTRAINT subscriptions_customer_id_foreign FOREIGN KEY (customer_id) REFERENCES users(id) ON DELETE CASCADE; ALTER TABLE subscriptions DROP FOREIGN KEY shop_subscriptions_plan_id_foreign; ALTER TABLE subscriptions ADD CONSTRAINT subscriptions_plan_id_foreign FOREIGN KEY (plan_id) REFERENCES subscription_plans(subscription_plan_id) ON DELETE CASCADE;

Düzeltildi Foreign key'ler artık doğru tablolara bakıyor!

2. Livewire Component Discovery Hatası ORTA

Hata Mesajı:

Unable to find component: [modules.subscription.app.http.livewire.admin.subscription-manage-component]

Sebep: Yeni oluşturulan SubscriptionManageComponent Livewire tarafından henüz keşfedilmemiş

Çözüm:

  1. Livewire cache temizleme: php artisan livewire:discover
  2. Veya component'i manuel register etme

🎯 Sistem Çalışma Prensibi

1. Plan Yönetimi

  • Oluşturma: Admin panelden plan tanımla (Premium, Starter vb.)
  • Fiyatlandırma: Aylık ve yıllık fiyatlar ayrı ayrı belirlenebilir
  • Özellikler: Her plana özel features array'i ile özellikler eklenir
  • Çoklu Dil: Title ve description JSON formatında saklanır
  • Durum Kontrolü: is_active ile aktif/pasif yönetimi

2. Abonelik Atama

  • Kullanıcı Seçimi: Dropdown'dan kullanıcı seç (users tablosundan)
  • Plan Seçimi: Dropdown'dan plan seç (subscription_plans tablosundan)
  • Billing Cycle: Aylık veya yıllık döngü seçimi
  • Fiyat Hesaplama: Plan + billing_cycle kombinasyonuna göre otomatik
  • Deneme Süresi: İsteğe bağlı trial period (örn: 7 gün)
  • Otomatik Yenileme: auto_renew flag'i ile kontrolü

3. Durum Yönetimi (Status Enum)

Durum Açıklama Kullanım
active Aktif Abonelik Kullanıcı tüm özelliklere erişebilir
trial Deneme Süresi Ödeme yapılmadan trial_days kadar kullanım
paused Duraklatıldı Geçici olarak durdurulmuş
cancelled İptal Edildi Kullanıcı iptal etmiş
expired Süresi Doldu current_period_end geçmiş
pending_payment Ödeme Bekliyor Ödeme henüz tamamlanmamış

✅ Yapılan İyileştirmeler

  • Foreign Key Düzeltmesi: customer_id ve plan_id doğru tablolara bağlandı
  • Modern UI: Kullanıcı dostu subscription management sayfası oluşturuldu
  • Route Ekleme: /admin/subscription/manage endpoint'i eklendi
  • Helper Menu: "Yeni Abonelik" butonu admin menüye eklendi
  • Otomatik Fiyat Hesaplama: Plan ve billing_cycle seçimine göre fiyat otomatik güncellenir
  • Validation: Tüm gerekli alanlar için doğrulama kuralları eklendi
  • Test Subscription: Serkan Şimşek için test subscription oluşturuldu (SUB-6927A3836A89A)

🔄 Sonraki Adımlar

  1. Livewire Component Discovery: Component cache'i temizle
  2. Liste Sayfası: Subscription index sayfasını güncelle (tabloyu göster)
  3. Ödeme Entegrasyonu: Payment gateway bağlantısı
  4. Webhook Sistemi: Otomatik yenileme için webhook endpoint
  5. Email Bildirimleri: Subscription başlangıç, bitiş, yenileme mailleri
  6. Kullanıcı Dashboard: Frontend'de "Aboneliğim" sayfası