Müzik türleri (genres) sayfalarında playlist gösterimi ve Sector pattern'ine geçiş planlaması
Şu anki durum: Kullanıcı bir müzik türüne (mesela "Rock") tıkladığında, o türdeki tüm şarkılar liste halinde gösteriliyor. Ancak bu çok uzun ve karışık bir liste oluyor.
Yeni sistem: Artık müzik türlerine playlist atayabiliyoruz. Kullanıcı bir türe tıkladığında, o türle ilgili hazırlanmış playlistleri görecek. Bu, sektörler sayfasındaki sisteme benziyor (mesela "Alışveriş Merkezi" sektörüne tıklayınca içindeki playlistler gösteriliyor).
Playlist'e tıklayınca ne olacak? Bilgisayarda preview modda (ön izleme) açılacak. Kullanıcı playlist detaylarını görecek, şarkıları görecek ve hemen çalmaya başlayabilecek.
Özetle: "Rock müziği dinlemek istiyorum" diyen kullanıcı → Rock türüne tıklıyor → "Rock Klasikleri", "Modern Rock", "Türkçe Rock" gibi hazır playlistleri görüyor → Beğendiğine tıklıyor → Hemen dinlemeye başlıyor.
Demo/Test için: Sistemde henüz genre-playlist atamaları olmadığı için, rastgele playlistleri türlere atayacağız. Böylece sistem çalışır hale gelecek ve test edilebilecek.
Database İlişkisi: Playlist model'inde zaten genres() ilişkisi mevcut (playlistables tablosu üzerinden polymorphic many-to-many)
Tablo: muzibu_playlistables (playlistable_type = 'genre', playlistable_id = genre_id)
Controller: GenreController::show() şu anda songs gösteriyor
View: genres/show.blade.php şu anda song-simple-row component'lerini listeliyor
Referans: SectorController::show() ve sectors/show.blade.php pattern'i kullanılacak
Genre Model: HasPlaylistDistribution trait eklenecek (Sector gibi)
Controller: $genre->playlists() ilişkisi ile playlist'ler çekilecek (aktif + şarkılı olanlar)
View: playlist-card component'leri grid layout ile gösterilecek (:preview="true" prop'u ile)
<x-muzibu.playlist-card :playlist="$playlist" :preview="true" />
:preview="true" prop'u sayesinde playlist'e tıklayınca PC'de preview modda açılır (mobilde normal açılır)
Genre.php dosyasına HasPlaylistDistribution trait'ini ekle (Sector model gibi)
use Modules\Muzibu\App\Traits\HasPlaylistDistribution;
use HasPlaylistDistribution;
Trait eklendikten sonra $genre->playlists() ilişkisi otomatik kullanılabilir hale gelir
SectorController::show() pattern'ini uygula:
sectors/show.blade.php pattern'ini uygula:
API için genre-detail.blade.php partial'ını güncelle (SPA uyumluluğu için)
Test ve demo için rastgele playlistleri genre'lere ata:
// Örnek SQL
INSERT INTO muzibu_playlistables
(playlist_id, playlistable_type, playlistable_id, position)
VALUES (123, 'genre', 5, 0)
Tüm değişiklikler sonrası test ve cache temizliği:
Cache Problemi
View ve response cache'i mutlaka temizlenmeli, aksi halde eski songs listesi gösterilmeye devam eder
Preview Mode
:preview="true" prop'u sadece PC'de preview açar, mobilde normal açılır (playlist-card component'inin mantığı)
Polymorphic Type
playlistable_type değeri 'genre' olmalı (küçük harf, tekil), 'Genre' veya 'genres' değil!
Aktif + Şarkılı Playlist Filtresi
whereHas('songs') ile mutlaka filtrelenmeli, aksi halde boş playlistler gösterilir (kötü UX)
Rastgele Atama Tekrarı
Demo playlist atamaları yaparken UNIQUE constraint var, duplicate INSERT hatası alabilirsiniz (INSERT IGNORE kullanın)
Genre Sayfası: Kullanıcı bir türe (örn: "Rock") tıkladığında, şarkılar yerine o türe ait playlistler grid layout ile gösterilir
Preview Mode: PC'de playlist'e tıklayınca preview modda (overlay) açılır, mobilde normal sayfa olarak açılır
Tutarlı UX: Genre sayfası, Sector sayfası ile aynı görünüm ve davranışa sahip olur (tek fark: radios bölümü olmayabilir)
Demo Hazır: Rastgele playlist atamaları sayesinde sistem test edilebilir ve kullanıcıya gösterilebilir hale gelir
API Uyumluluğu: SPA sistemi için apiShow() endpoint'i de güncellenir, genre-detail partial'ı playlist'leri gösterir