muzibu_songs.hls_path kolonundaki tenant prefix sorunu
Veritabanında her şarkının HLS dosya yolu saklanıyor. Bu yolun başına yanlışlıkla tenant1001/ ekleniyor. Laravel zaten tenant modunda çalışırken dosya yollarının başına otomatik olarak tenant1001/ ekliyor. Sonuç: yol iki kere ekleniyor ve dosya bulunamıyor.
tenant1001/muzibu/hls/51/playlist.m3u8
/storage/tenant1001/app/public/tenant1001/muzibu/hls/51/...
muzibu/hls/51/playlist.m3u8
/storage/tenant1001/app/public/muzibu/hls/51/...
Ana player (SongStreamController::serveHls) veritabanındaki hls_path'i kullanmıyor. URL'deki song ID'den yolu kendisi oluşturuyor. Bu yüzden müzik çalıyor. Ama bazı admin paneli özellikleri ve eski API endpoint'ler bu yanlış yolu kullanıyor ve sessizce hata veriyor.
// YANLIŞ - tenant prefix ekleniyor $relativePath = 'tenant' . tenant()->id . '/'muzibu/hls/' . $song->song_id . '/playlist.m3u8';// DOĞRU - prefix olmadan $relativePath = 'muzibu/hls/' . $song->song_id . '/playlist.m3u8';
// Tenant context'te storage_path() zaten tenant dizinine işaret ediyor: storage_path() = /storage/tenant1001/ storage_path('app/public') = /storage/tenant1001/app/public/ // DB'deki hls_path = tenant1001/muzibu/hls/51/playlist.m3u8 // Birleşince: storage_path('app/public/' . hls_path) = /storage/tenant1001/app/public/tenant1001/muzibu/hls/51/playlist.m3u8 // ↑ otomatik ↑ DB'deki (fazlalık!)
| Dosya | Satır | Kullanım | Etkileniyor mu? |
|---|---|---|---|
| SongController.php | 287 | storage_path('app/public/' . $song->hls_path) |
EVET - Dosya bulunamaz |
| Song.php (Model) | 509 | Storage::disk('public')->url($this->hls_path) |
EVET - Yanlış URL üretir |
| ConvertSongToHLS.php | 46 | Storage::disk('tenant')->exists($song->hls_path) |
EVET - Mevcut HLS'i algılamaz |
| playlist-songs-manage.blade | 161,304 | asset('storage/' . $song->hls_path) |
Kısmen - asset() farklı çözümler |
| SongStreamController.php | - | hls_path kullanmıyor, songId ile yol oluşturuyor | HAYIR - Etkilenmiyor |
| SignedUrlService.php | - | hls_path kullanmıyor, songId ile yol oluşturuyor | HAYIR - Etkilenmiyor |
| SidebarComposer, CacheService, Repository | - | Sadece whereNotNull('hls_path') filtre |
HAYIR - Sadece varlık kontrolü |
| API Controller'lar (Album, Artist, Genre vs.) | - | Sadece 'hls_path' => $song->hls_path JSON çıktı |
HAYIR - Sadece bilgi döndürür |
-- Önce kontrol (kaç kayıt etkilenecek?)
SELECT COUNT(*) FROM muzibu_songs WHERE hls_path LIKE 'tenant1001/%';
-- Önce 5 kayıt örnek göster
SELECT song_id, hls_path FROM muzibu_songs
WHERE hls_path LIKE 'tenant1001/%' LIMIT 5;
-- Düzeltme (sadece tenant1001/ prefix'ini kaldır)
UPDATE muzibu_songs
SET hls_path = REPLACE(hls_path, 'tenant1001/', '')
WHERE hls_path LIKE 'tenant1001/%';
-- Sonuç doğrulama
SELECT song_id, hls_path FROM muzibu_songs
WHERE hls_path IS NOT NULL AND hls_path != '' LIMIT 5;
-- Hala tenant prefix olan var mı?
SELECT COUNT(*) FROM muzibu_songs WHERE hls_path LIKE 'tenant%';
tenant1001/ kısmını kaldırıyor. Hiçbir veri silinmiyor, hiçbir kayıt kaybedilmiyor. Dosyalar fiziksel olarak yerinde duruyor. Sadece veritabanındaki referans yolu düzeltiliyor.
// ESKİ (satır 158):
$relativePath = 'tenant' . tenant()->id . '/muzibu/hls/' . $song->song_id . '/playlist.m3u8';
// YENİ:
$relativePath = 'muzibu/hls/' . $song->song_id . '/playlist.m3u8';
Production AI: Lütfen aşağıdaki kontrolleri yap ve her birinin sonucunu raporla:
SELECT DISTINCT SUBSTRING_INDEX(hls_path, '/', 1) as prefix, COUNT(*) as cnt
FROM muzibu_songs WHERE hls_path IS NOT NULL AND hls_path != ''
GROUP BY prefix;
# Rastgele bir şarkının düzeltilmiş path'i ile fiziksel dosyayı kontrol et
# Örnek song_id=51 için:
ls -la /var/www/vhosts/muzibu.com/httpdocs/storage/tenant1001/app/public/muzibu/hls/51/playlist.m3u8
# Bu path OLMAMALI (çift tenant):
ls -la /var/www/vhosts/muzibu.com/httpdocs/storage/tenant1001/app/public/tenant1001/muzibu/hls/51/playlist.m3u8
# Beklenen: No such file or directory
php artisan tinker --execute="
\$t = \App\Models\Tenant::find('1001');
tenancy()->initialize(\$t);
echo storage_path('app/public') . PHP_EOL;
// Beklenen: .../storage/tenant1001/app/public
"
# Düzeltilmiş path ile dosya bulunabilir mi?
# muzibu/hls/51/playlist.m3u8
php artisan tinker --execute="
\$t = \App\Models\Tenant::find('1001');
tenancy()->initialize(\$t);
\$path = storage_path('app/public/muzibu/hls/51/playlist.m3u8');
echo \$path . PHP_EOL;
echo file_exists(\$path) ? 'DOSYA VAR' : 'DOSYA YOK';
"
| Test | Düzeltme Öncesi | Düzeltme Sonrası |
|---|---|---|
| storage_path('app/public/' + hls_path) | Dosya bulunamadı | Dosya bulundu |
| Storage::disk('tenant')->exists() | false | true |
| Song::getHlsUrl() | Çift tenant1001 URL | Doğru URL |
| Müzik player çalışıyor mu? | Evet (hls_path kullanmıyor) | Evet |
-- Düzeltmeyi geri al (tenant1001/ prefix'ini tekrar ekle)
UPDATE muzibu_songs
SET hls_path = CONCAT('tenant1001/', hls_path)
WHERE hls_path LIKE 'muzibu/%'
AND hls_path NOT LIKE 'tenant%';