174 query → 1 query dönüşümü
26 Aralık 2025
song-row.blade.php, song-card.blade.php, vb:
is_favorite: {{ $song->isFavoritedBy(auth()->id()) }}
Her şarkı için ayrı DB sorgusu → 174 query!
favorites.js zaten optimize:
loadFavorites() → /api/favorites/list
Tek API call ile tüm favorileri çekiyor
Ne yapacağız? Şu anda sayfa açıldığında her şarkı için "Bu favori mi?" diye ayrı ayrı soruyoruz. Bunun yerine sayfa açılırken tek seferde tüm favorileri çekip JavaScript'e vereceğiz.
Dinamik Güncellemeler:
Benzetme: Alışveriş listesi gibi düşün. Her ürüne baktığında "Bu listede mi?" diye cüzdana bakmak yerine, listeyi bir kere çıkarıp hepsini aynı anda kontrol ediyorsun.
Modules/Favorite/app/Services/FavoriteService.php
Tek sorguda kullanıcının tüm favorilerini type bazlı gruplayarak döndürür:
getUserFavoriteIds($userId) → ['song' => [1,2,3], 'album' => [5,6], ...]
resources/views/themes/muzibu/layouts/app.blade.php
window.userFavorites = @json($favoriteIds ?? []);
Sayfa yüklendiğinde favoriler zaten JS'te hazır olacak
public/themes/muzibu/js/player/features/favorites.js
// API call yapmak yerine server'dan gelen data'yı kullan
if (window.userFavorites) this.favorites = window.userFavorites;
API call kaldırılıyor → Ekstra network isteği yok
~15 component dosyası
❌ Eski (her biri query):
is_favorite: {{ $song->isFavoritedBy(auth()->id()) ? 'true' : 'false' }}
✅ Yeni (JS store kullan):
:is_favorite="$store.favorites.isFavorite('song', {{ $songId }})"
app/Providers/AppServiceProvider.php veya ViewComposer
Tüm Muzibu view'larına $favoriteIds değişkeni otomatik inject edilir.
Controller'ları tek tek değiştirmek yerine merkezi çözüm.
Kullanıcı kalp ikonuna tıklar
→ $store.favorites.toggle('song', 123)
JS hemen günceller (optimistic update)
→ Kalp kırmızı olur, toast gösterilir
API call arka planda yapılır
→ POST /api/favorites/toggle
DB'ye kaydedilir
→ favorites tablosuna INSERT
Sayfa yenilenmeden anında yansır!
→ Tüm aynı şarkı kartları güncellenir (reactive)
Bu plan onaylanırsa uygulamaya geçeceğim. Değişiklikler: