⚠️ Page Modülü - Shop Bağımlılıkları

📅 Tarih: 2025-12-03 23:30 | 🎯 Modül: Page | 🔍 Analiz: Cross-Module Dependencies

🚨 Kritik Sorun

Page modülü Shop modülüne bağımlı. Bu tenant-aware sistem için yanlış mimari!

🔍 Bulunan Bağımlılıklar

1. Homepage Products Query

PageController.php → Satır 51-56

$homepageProductsQuery = \Modules\Shop\App\Models\ShopProduct::where('show_on_homepage', true) ->where('is_active', true) ->with(['category', 'brand', 'media', 'currency']) ->orderByRaw('COALESCE(homepage_sort_order, 999999) ASC') ->orderBy('product_id', 'desc') ->get();

Sorun: Page modülü direkt olarak ShopProduct modelini kullanıyor.

2. Product URL Resolution

PageController.php → Satır 99

'url' => \Modules\Shop\App\Http\Controllers\Front\ShopController::resolveProductUrl($product),

Sorun: ShopController methodunu direkt çağırıyor.

💡 Çözüm Önerileri

✅ Öneri 1: Homepage Widget Sistemi (ÖNERİLEN)

  • Widget Provider Pattern: Her modül kendi widget'ını sunabilir
  • Homepage: Aktif widget'ları dinamik olarak yükler
  • Shop modülü pasifse: Shop widget'ı yüklenmez, Page bozulmaz
  • Yeni modüller: Kendi homepage widget'larını ekleyebilir
// App\Services\WidgetService getActiveWidgets() → [ 'shop' => ShopHomepageWidget, 'blog' => BlogHomepageWidget, // ... ]

✅ Öneri 2: Event System

  • Page modülü: HomepageRendering event'i yayınlar
  • Shop modülü: Event'i dinler, products ekler
  • Avantaj: Modüller bağımsız, gevşek bağlantı
// PageController event(new HomepageRendering()); // ShopServiceProvider (listener) HomepageRendering::class => AddShopProducts::class

✅ Öneri 3: Homepage Builder

  • Admin panelde homepage builder
  • Tenant: Hangi modüllerin homepage'de görüneceğini seçer
  • Dinamik section yönetimi

🎯 Önerilen Mimari

App/Services/HomepageService.php │ ├── getActiveWidgets() // Aktif widget'ları topla │ ├── Shop modülü aktifse → ShopWidget │ ├── Blog modülü aktifse → BlogWidget │ └── Custom widget'lar │ └── render() // Homepage'e inject et Modules/Shop/Widgets/HomepageWidget.php │ ├── isActive() // Modül aktif mi? ├── getData() // Widget verisi └── render() // View path

⚡ Acil Çözüm (Geçici)

Hemen uygulanabilir geçici çözüm:

// PageController.php - homepage() method if (class_exists('\\Modules\\Shop\\App\\Models\\ShopProduct')) { // Shop modülü varsa products yükle $homepageProducts = ...; } else { // Shop yoksa boş array $homepageProducts = []; } // View'de de kontrol ekle @if(!empty($homepageProducts)) {{-- Products section --}} @endif

⚠️ Uyarı: Bu sadece geçici çözüm! Asıl mimari düzeltilmeli.