SORUN:
HLS fields migration dosyası hem central hem de tenant database klasöründe mevcut. Bu multi-tenant kurala aykırı - Muzibu tabloları SADECE tenant database'de olmalı!
Dosya Konumları:
database/migrations/2025_11_11_050254_add_hls_fields_to_muzibu_songs_table.php
database/migrations/tenant/2025_11_11_050254_add_hls_fields_to_muzibu_songs_table.php
ÇÖZÜM:
Beklenen Sonuç: Temiz migration yapısı, multi-tenant kurallara uyum
SORUN:
Sector modeli HasTranslations trait kullanıyor ama TranslatableEntity interface implement etmiyor. Diğer modeller (Song, Album, Artist, Genre) bu interface'i implement ediyor.
Mevcut Durum:
class Sector extends BaseModel implements HasMedia
Olması Gereken:
class Sector extends BaseModel implements HasMedia, TranslatableEntity
ÇÖZÜM:
use App\Contracts\TranslatableEntity; import ekleimplements TranslatableEntity interface ekleBeklenen Sonuç: Model tutarlılığı, type safety, IDE autocomplete desteği
SORUN:
Album model'inin toSearchableArray() metodunda $this->release_date kullanılıyor, ancak database'de bu field yok!
Kod referansı (Album.php:338):
'release_date' => $this->release_date,
Admin lang dosyasında çeviri var ama field yok!
ÇÖZÜM (2 Seçenek):
Seçenek A: Migration Ekle (ÖNERİLEN)
add_release_date_to_muzibu_albums$table->date('release_date')->nullable();Seçenek B: Kodu Kaldır
release_date referansını kaldırÖneri: Release date albümler için mantıklı bir field - Migration eklemek daha iyi
SORUN:
Guest user ve non-premium user için aynı kod bloğu 2 kez tekrarlanıyor (satır 52-96 ve 100-149). Tek fark: Success message metni.
Tekrarlanan Kod:
- HLS conversion dispatch
- Dynamic playlist URL
- Signed MP3 fallback
- Preview metadata (30 sec, 3 chunk)
ÇÖZÜM:
getPreviewStreamResponse($song, $message)Beklenen Sonuç: Daha temiz kod, bakım kolaylığı, bug riski azalması
SORUN:
player-core.js içinde device limit deviceLimit: 1 olarak hardcoded. Backend'deki gerçek limit (user > plan > setting hierarchy) ile senkronize değil!
Mevcut Durum (player-core.js:40):
deviceLimit: 1, // Kullanıcı cihaz limiti
Backend'de 3-tier hierarchy var:
1. user.device_limit (VIP override)
2. subscription.plan.device_limit
3. setting('auth_device_limit')
ÇÖZÜM:
deviceLimit: {{ $deviceLimit }}deviceLimit: config.deviceLimit || 1Beklenen Sonuç: Backend-frontend senkronizasyonu, doğru limit gösterimi
SORUN:
DeviceController'da tenant()->id != 1001 kontrolü var. Bu CLAUDE.md kurallarına AYKIRI! Tenant'a özgü kod global controller'a yazılmamalı!
Sorunlu Kod (DeviceController.php:22):
if (!tenant() || tenant()->id != 1001) {
return response()->json(['limit_exceeded' => false]);
}
ÇÖZÜM:
shouldRun() zaten var!setting('auth_device_limit_enabled')Beklenen Sonuç: Generic kod, multi-tenant kurallarına uyum, ölçeklenebilirlik
SORUN:
player-core.js'deki musikuApp() fonksiyonu 100+ satır state içeriyor. Login form, register form, phone countries, validation, device state - hepsi tek objede!
State Kategorileri:
• Auth State: loginForm, registerForm, forgotForm, validation
• Phone State: phoneCountry, phoneCountries (17 ülke array)
• Device State: activeDevices, deviceLimit, selectedDeviceId
• Player State: isPlaying, shuffle, repeatMode, volume
ÇÖZÜM:
muzibuAuth() feature'ına taşı (zaten var)muzibuDeviceLimit() feature'ı oluşturNOT: Modular yapı zaten var (spread pattern), sadece devam ettirmek gerekiyor
SORUN:
Song cover için hem Thumbmaker (media_id field) hem de Spatie MediaLibrary ('hero' collection) kullanılıyor. İki sistem birden karmaşıklık yaratıyor.
Mevcut Kullanım:
• media_id → Thumbmaker (thumb() helper)
• 'hero' collection → Spatie (getFirstMediaUrl())
• getCoverUrl() → İkisini de kontrol ediyor (fallback chain)
ÇÖZÜM:
DİKKAT: Bu değişiklik BÜYÜK refactoring gerektirir. Mevcut sistem ÇALIŞIYOR, acil düzeltme değil!
Öneri: Sistem çalıştığı için şu an DOKUNMA. Gelecekte yeni modül eklerken Thumbmaker tercih et (sistem standardı)
⏱️ Süre: 15 dakika • 🎯 Etki: Sistem kurallarına uyum
⏱️ Süre: 1-2 saat • 🎯 Etki: Tutarlılık, doğru veri gösterimi
⏱️ Süre: 2-3 saat • 🎯 Etki: Kod kalitesi, bakım kolaylığı
⏱️ Süre: N/A • 🎯 Etki: Sistem çalışıyor, acil değil
Model Katmanı
8 Model (Song, Album, Artist, Genre, Sector, Radio, Playlist, SongPlay)
Service Katmanı
10 Servis (Cache, Device, CRUD services)
Controller
15+ Controller (API + Admin + Front)
Repository
7 Repository (Data access layer)
Blade Components
24 Component (Player, Queue, Auth, Device modals)
JavaScript
Alpine.js + Modular Features (spread pattern)
Player Core
Howler.js (MP3) + HLS.js (streaming)
Features
Favorites, Auth, Keyboard shortcuts, Router
Cache
Redis (tenant-aware, değişken TTL)
Session
Redis + MySQL (hybrid device tracking)
Search
Meilisearch (full-text, multilingual)
Media
HLS streaming + Signed URLs (secure)
Detaylı sistem dokümantasyonu için guide'a bakın:
✓ Core Architecture (Multi-tenant, Hybrid Session)
✓ Authentication & Sessions (Redis + MySQL)
✓ Device Limiting (3-tier hierarchy)
✓ Membership Tiers (Free, Trial, Premium)
✓ Playback Features (Queue, HLS streaming)
✓ Testing Status & Production notes