Muzibu müzik platformu cache tutarsızlığı sorunu çözümü
Müzik platformunda çalma listeleri (playlist), içindeki şarkıların sayısını ve toplam süresini hızlı gösterebilmek için bu bilgileri önceden hesaplayıp saklar (buna cache denir). Ancak bir şarkı pasif hale getirildiğinde (örneğin telif sorunu nedeniyle), bu şarkı hala cache'de sayılıyordu. Bu yüzden ekranda "21 saat müzik var" gözüküyor ama gerçekte sadece "10 saat" müzik vardı.
Sistemde zaten bir "otomatik güncelleme" mekanizması vardı, ancak küçük bir yazım hatasından dolayı çalışmıyordu. Bu hatayı düzelttik ve artık:
Kullanıcılar artık çalma listelerinde doğru şarkı sayısı ve doğru toplam süre görecek. Müzik kategorileri de güncel istatistikler sunacak. Bu, kullanıcı deneyimini iyileştirir ve platformun güvenilirliğini artırır.
Playlist ID 990 - Tutarsızlık Tespiti:
Sebep: Bazı şarkılar is_active = 0 yapıldığında, muzibu_playlists tablosundaki songs_count ve total_duration kolonları güncellenmiyordu.
Dosya: Modules/Muzibu/App/Observers/SongObserver.php
Satır: 398
❌ Önceki Kod:
✅ Düzeltilmiş Kod:
Açıklama: muzibu_playlistables tablosunda playlistable_type kolonunda string değer ('Sector', 'Genre', 'Radio', 'Corporate') saklanıyor. Sector::class kullanımı Modules\Muzibu\App\Models\Sector döndürdüğü için eşleşme gerçekleşmiyordu.
SongObserver::updated() metodu şu durumlarda tetiklenir:
decrementCounts() - Album, Genre, Artist cache'lerini azaltrecalculatePlaylistAndSectorCounts() - İlgili Playlist ve Sector'leri recalculate etincrementCounts() - Album, Genre, Artist cache'lerini artırrecalculatePlaylistAndSectorCounts() - İlgili Playlist ve Sector'leri recalculate etPlaylist Cache Güncelleme:
UPDATE muzibu_playlists SET
songs_count = (
SELECT COUNT(*) FROM muzibu_playlist_song ps
JOIN muzibu_songs s ON ps.song_id = s.song_id
WHERE ps.playlist_id = muzibu_playlists.playlist_id
AND s.is_active = 1
AND s.deleted_at IS NULL
),
total_duration = (
SELECT SUM(s.duration) FROM muzibu_playlist_song ps
JOIN muzibu_songs s ON ps.song_id = s.song_id
WHERE ps.playlist_id = muzibu_playlists.playlist_id
AND s.is_active = 1
AND s.deleted_at IS NULL
)
Sector Cache Güncelleme:
-- 1. Sector'ün playlist'lerini al (playlistables) -- 2. Playlist'lerdeki benzersiz şarkıları al -- 3. Aktif şarkıların count ve duration'ını hesapla -- 4. Sector cache'ini güncelle
| # | Sector | Şarkı Sayısı | Toplam Süre |
|---|---|---|---|
| 1 | Restaurant | 21,130 | 1065s 14dk |
| 2 | Coffee Shop | 20,606 | 1040s 2dk |
| 3 | Cafe | 20,081 | 1013s 30dk |
| 4 | Mağaza | 19,743 | 993s 2dk |
| 5 | Butik Otel | 19,148 | 966s 57dk |
songs_count, total_durationsongs_count, total_durationis_active, duration kolonlarıMuzibu müzik platformunda playlist ve sector cache tutarsızlığı sorunu başarıyla çözüldü. Mevcut tüm veriler güncellendi ve otomatik güncelleme sistemi düzgün çalışır hale getirildi.