Ardışık subscription'lar ile üyelik süresi yönetimi - İmplementasyon Tamamlandı
Ne Yapıldı?
📌 Örnek (User 2):
✅ Subscription #10: Aktif (10 Ara 2025 → 10 Ara 2026)
⏳ Subscription #55: Beklemede (10 Ara 2026 → 10 Ara 2027)
⏳ Subscription #56: Beklemede (10 Ara 2027 → 9 Ara 2028)
→ Toplam üyelik: 3 yıl!
Migration: users.subscription_expires_at
Central DB'ye yeni sütun eklendi
Migration: subscriptions.status güncelleme
pending_payment, pending, active, expired, cancelled
User.php model güncellemesi
isPremium() ultra hızlı, recalculateSubscriptionExpiry() helper
Subscription.php model güncellemesi
deleteAndRechain(), isPending(), chainPosition accessor
Order::activateSubscriptionItems() zincir mantığı
Yeni subscription öncekinin bittiği yerden başlıyor
ProcessSubscriptionTransitions command
Saatlik çalışan scheduler: active→expired, pending→active
Mevcut veriler düzeltildi
8 kullanıcının subscription_expires_at hesaplandı, User 2 zinciri düzenlendi
pending_payment
Ödeme Bekliyor
pending
Sırada Bekliyor
active
Aktif
expired
Süresi Doldu
Migration (Yeni):
database/migrations/2025_12_23_050000_add_subscription_expires_at_to_users_table.php
database/migrations/tenant/2025_12_23_050001_update_subscriptions_status_column.php
Model:
app/Models/User.php → subscription_expires_at, isPremium(), recalculateSubscriptionExpiry()
Modules/Subscription/app/Models/Subscription.php → deleteAndRechain(), isPending(), chainPosition
Satın Alma:
Modules/Cart/app/Models/Order.php → activateSubscriptionItems() (zincir mantığı)
Command:
app/Console/Commands/ProcessSubscriptionTransitions.php (Yeni)
app/Console/Kernel.php → Saatlik schedule eklendi
Bir pending subscription silindiğinde, sonraki subscription'ların tarihleri otomatik olarak geriye kaydırılır.
Örnek: Ortadaki silinirse
Önce:
#1: Active (Ara 2025 → Ara 2026)
#2: Pending (Ara 2026 → Ara 2027) ← SİLİNİYOR
#3: Pending (Ara 2027 → Ara 2028)
Sonra:
#1: Active (Ara 2025 → Ara 2026)
#3: Pending (Ara 2026 → Ara 2027) ← TARİH GERİ KAYDI
Not: Sadece pending veya pending_payment durumundaki subscription'lar silinebilir.
Active subscription önce cancel edilmelidir.