📊 Portfolio Kategori Silme İşlemleri

Detaylı analiz: Bir portfolio kategorisi silindiğinde sistem tarafından yapılan tüm işlemler
📅 11 Aralık 2025 🎯 Tenant: tuufi.com (Tüm tenant'lar için geçerli) 📁 Modül: Portfolio

🔄 İşlem Akışı

1

SİLME ÖNCESİ KONTROLLER

PortfolioCategoryObserver → deleting() event

⚠️ Portfolio Bağlantı Kontrolü

Kategoriye bağlı portfolio (proje/ürün içeriği) varsa silme işlemi engellenir.

Kontrol:

$category->portfolios()->count() > 0

Sonuç:

  • Portfolio varsa → Exception fırlatılır
  • Hata mesajı: "Bu kategoriye ait portfoliolar var. Önce portfolioları silmelisiniz."
  • Kullanıcı önce portfolioları silmeli veya başka kategoriye taşımalı

📝 Log Kaydı (Pre-Delete)

Silme işlemi başlatılmadan önce Log dosyasına kayıt atılır.

Kaydedilen Bilgiler: category_id, title, user_id
2

SİLME İŞLEMİ

PortfolioCategoryService → deleteCategory()

🗑️ Database'den Silme

Repository (veri erişim katmanı) üzerinden kategori kaydı veritabanından silinir.

Silme yöntemi: Soft Delete veya Hard Delete

• Soft Delete → Kayıt deleted_at ile işaretlenir, geri yüklenebilir
• Hard Delete → Kayıt tamamen silinir, geri dönüş yok

3

SİLME SONRASI TEMİZLİK

PortfolioCategoryObserver → deleted() event

🧹 Cache Temizleme (Multi-Level)

Sistem performansı için cachelenen kategori verileri temizlenir. Böylece kullanıcılar güncel veriyi görür.

1. Tenant Cache Service

Prefix bazlı temizleme: portfolio_categories

2. Genel Cache Keys

  • portfolio_categories_list → Kategori listesi
  • portfolio_categories_menu_cache → Menü cache
  • portfolio_category_detail_{id} → Spesifik kategori

3. SEO Cache

universal_seo_portfolio_category_{id} → SEO meta verileri

4. Tag-Based Cache

Eğer cache store tag destekliyorsa: ['portfolio_categories', 'content'] tag'leri temizlenir

5. Response Cache (Spatie)

Tüm sayfa cache'leri temizlenir (full cache clear)

🗑️ SEO Ayarlarını Silme

Kategoriye ait SEO meta verileri (title, description, keywords, og tags) de veritabanından silinir.

İlişkili tablo: seo_settings

Önemli: SEO ayarları kategoriye polymorphic (çok biçimli ilişki) olarak bağlıdır ve otomatik silinir.

📋 Activity Log Kaydı

Kullanıcı aktivite takibi için silme işlemi loglanır.

Kaydedilen Bilgiler: category model, "silindi" işlemi, user_id, timestamp

📝 Log Kaydı (Post-Delete)

Silme işlemi başarıyla tamamlandıktan sonra detaylı Log kaydı atılır.

Log Level: Info
Mesaj: "Portfolio Category deleted successfully"

🗄️ İlişkili Tablolar & İlişkiler

Doğrudan İlişkiler

portfolios (hasMany)

Foreign Key: portfolio_category_id

⚠️ Portfolio varsa silme engellenir!

seoSetting (morphOne)

Polymorphic ilişki

✅ Otomatik silinir

Hiyerarşik İlişkiler

parent (belongsTo)

Foreign Key: parent_id

Üst kategori referansı (nullable)

children (hasMany)

Alt kategoriler (recursive)

⚠️ Alt kategori kontrolü yok! (Potansiyel sorun)

🖼️ Medya Yönetimi (Spatie Media Library)

⚠️

Kategori Görselleri

Portfolio kategorisi category_image media collection'ına sahip. Spatie Media Library kullanılıyor.

Silme Durumu:

Spatie Media Library, model silindiğinde ilişkili media dosyalarını otomatik siler (eğer HasMedia trait'i doğru kullanılmışsa).

Media Silme:

  • • Database'den media kayıtları silinir
  • • Storage'dan fiziksel dosyalar silinir
  • • Thumbnail/conversion'lar da silinir

⚠️ Potansiyel Sorunlar & Öneriler

!

Alt Kategori Kontrolü Eksik

deleting() event'inde children kontrolü yok! Üst kategori silinirse alt kategorilerin parent_id değeri orphan kalır.

Öneri:

Alt kategorisi olan kategori silinmeden önce hata fırlat veya alt kategorileri parent_id = null yap.

!

Force Delete Durumu

forceDeleting() event'inde sadece log kaydı var, ekstra kontrol yok. Kalıcı silme işlemi geri alınamaz!

Öneri:

Force delete öncesinde tüm ilişkileri kontrol et ve kullanıcıyı uyar.

i

Circular Reference Koruması

calculateDepth() metodunda circular reference (döngüsel ilişki) koruması var. İyi bir güvenlik önlemi!

✅ Özet

Yapılan İşlemler

  • Portfolio bağlantı kontrolü
  • Database'den silme
  • 5 seviyeli cache temizleme
  • SEO ayarlarını silme
  • Media dosyalarını silme
  • Activity & Log kaydı

Dikkat Edilmesi Gerekenler

  • Alt kategori kontrolü eksik
  • Force delete geri alınamaz
  • ! Portfolio varsa silinemez
  • i Circular reference korumalı

📂 İlgili Kod Dosyaları

  • Observer: Modules/Portfolio/app/Observers/PortfolioCategoryObserver.php
  • Service: Modules/Portfolio/app/Services/PortfolioCategoryService.php
  • Model: Modules/Portfolio/app/Models/PortfolioCategory.php
  • Repository: Modules/Portfolio/app/Repositories/PortfolioCategoryRepository.php