Şarkı, albüm ve sanatçı değerlendirme sistemi
Kullanıcıların şarkı, albüm ve sanatçıları puanlayabileceği bir değerlendirme sistemi kurduk. 5 yıldız üzerinden puanlama ve metin yorumu yapılabiliyor.
Kolay ve hızlı puanlama
Detaylı görüş bildirme
Uygunsuz içerik kontrolü
Ortalama puan hesaplama
Kullanıcı bir şarkıya veya albüme yıldız verip yorum yazdığında, sistem şu işlemleri gerçekleştiriyor:
auth()->check() ile kullanıcının giriş yapmış olması kontrol ediliyor. Misafir kullanıcılar değerlendirme yapamıyor. Bu kontrol ReviewController'daki auth middleware'i ile sağlanıyor.
reviews tablosunda user_id + reviewable_id + reviewable_type kombinasyonu aranıyor. Daha önce değerlendirme yapılmışsa güncelleme, yapılmamışsa yeni kayıt oluşturuluyor. Unique constraint ile çift kayıt engelleniyor.
Review::create() ile rating (1-5 yıldız), comment (yorum metni), reviewable_type (Song, Album, Artist) ve reviewable_id kaydediliyor. Polymorphic ilişki sayesinde farklı içerik tipleri destekleniyor.
ReviewObserver::created() tetikleniyor ve ilgili içeriğin ortalama puanı yeniden hesaplanıyor: AVG(rating). Sonuç songs.average_rating veya albums.average_rating alanına yazılıyor.
Yorum metni uygunsuz kelime filtresinden (ProfanityFilter) geçiriliyor. Şüpheli içerik tespit edilirse status = pending olarak işaretlenip admin onayına sunuluyor.
İlgili içeriğin değerlendirme cache'i Cache::forget("song_{$id}_reviews") ile temizleniyor. Bir sonraki istekte güncel değerlendirmeler veritabanından çekilip yeniden cache'leniyor.
Kullanıcının içerik hakkındaki görüşü.
Film eleştirisi gibi
1-5 arası yıldız puanlaması.
Restoran puanlaması gibi
"Harika bir müzik deneyimi!"
"Çok beğendim, tavsiye ederim."