🐛 Bug Analizi 23 Aralık 2025

Subscription Uzatma Sorunu

Paket satın alındığında üyelik süresinin uzatılmaması problemi

📝 Basit Anlatım (Herkes İçin)

Sorun Ne?
Kullanıcı yeni paket satın aldığında sistem mevcut üyeliğini uzatmak yerine YENİ bir üyelik oluşturuyor. Bu yüzden aynı kullanıcıda birden fazla aktif üyelik oluşuyor ve üyelik süresi uzamıyor.

Örnek:
User 2'nin veritabanında 2 ayrı aktif subscription var:

  • Subscription #55: 23 Aralık 2025 → 23 Aralık 2026
  • Subscription #56: 23 Aralık 2025 → 23 Aralık 2026
Oysa olması gereken: Tek subscription, süresi 2 yıla uzatılmış olmalıydı.

Neden Önemli?
Kullanıcı üyeliğini uzatmak için ödeme yapıyor ama mevcut süresi uzamıyor. Sistem yanlış çalışıyor, müşteri memnuniyetsizliği ve potansiyel maddi kayıp söz konusu.

🔧 Teknik Detaylar (Geliştiriciler İçin)

📊 Mevcut (Hatalı) Akış

1. CheckoutPage::createSingleSubscription()
→ Her satın almada YENİ pending_payment subscription oluşturuyor
❌ Mevcut aktif subscription kontrolü YOK!
2. Order::activateSubscriptionItems()
→ Pending subscription buluyor ve aktifleştiriyor
❌ Uzatma mantığına hiç ulaşılmıyor (continue ile atlanıyor)

🔍 Sorunlu Kod Akışı

📁 CheckoutPage.php (satır 2073-2110):

createSingleSubscription() her zaman YENİ subscription oluşturuyor.
status: pending_payment olarak başlıyor.
// Mevcut aktif subscription kontrolü YOK!

📁 Order.php (satır 214-246):

activateSubscriptionItems() sırasıyla:
1. pending_payment ara → BULUNUYOR
2. Aktifleştir ve continue;
3. Mevcut aktif subscription kontrolü → HİÇ ÇALIŞMIYOR!

📋 Veritabanı Kanıtı

ID User Plan Status Başlangıç Bitiş
55 2 15 active 23.12.2025 23.12.2026
56 2 15 active 23.12.2025 23.12.2026

⚠️ User 2'nin 2 ayrı aktif subscription'ı var! Uzatma yerine yeni oluşturulmuş.

💡 Çözüm Önerisi

📝 Basit Anlatım

Sistem önce kullanıcının mevcut üyeliğini kontrol etmeli. Eğer aktif bir üyelik varsa, yeni üyelik oluşturmak yerine mevcut üyeliğin süresini uzatmalı.

🔧 Teknik Çözüm

Seçenek A: CheckoutPage'de Kontrol (Önerilen)

  • createSingleSubscription() içinde mevcut aktif subscription kontrolü yap
  • Aktif subscription varsa: "extends_subscription_id" ile pending oluştur
  • activateSubscriptionItems()'da bu ID'yi kontrol et ve mevcut subscription'ı uzat

Seçenek B: Order::activateSubscriptionItems'da Düzeltme

  • Pending subscription bulunsa bile, mevcut aktif subscription'ı da kontrol et
  • İkisi de varsa: Mevcut subscription'ı uzat, pending'i sil veya merged olarak işaretle
  • Sadece pending varsa: Aktifleştir

📋 Yapılacaklar

1️⃣

CheckoutPage::createSingleSubscription() Güncelleme

Mevcut aktif subscription kontrolü ekle

2️⃣

Order::activateSubscriptionItems() Güncelleme

Uzatma mantığını düzelt (pending + aktif birlikte varsa)

3️⃣

Mevcut Veritabanını Düzelt

User 2'nin duplicate subscription'larını birleştir

4️⃣

Test Et

Yeni satın almada uzatma mantığının çalıştığını doğrula

📁 İlgili Dosyalar

Modules/Cart/app/Http/Livewire/Front/CheckoutPage.php

→ createSingleSubscription() - satır 2073

Modules/Cart/app/Models/Order.php

→ activateSubscriptionItems() - satır 168

→ onPaymentCompleted() - satır 421

Modules/Payment/app/Services/PayTRCallbackService.php

→ handleSuccessPayment() - satır 135