Müzik Streaming Platformu - Teknik ve İşlevsel İnceleme
371
PHP Dosyası
15
Model
14
Service
3.8M
Toplam Boyut
Muzibu modülü, Spotify ve Apple Music benzeri bir müzik streaming platformudur. Kullanıcılar şarkı dinleyebilir, playlist oluşturabilir, favorilerine ekleyebilir ve yapay zeka destekli özelliklerden yararlanabilir.
Bu modül sadece Muzibu.com (Tenant 1001) için geliştirilmiştir ve diğer tenant'larda çalışmaz. Yani bu müzik özellikleri sadece muzibu.com domain'inde aktiftir.
Şarkı yükleme, düzenleme, silme. Her şarkı için kapak görseli, şarkı sözleri, süre bilgisi. Şarkılar albümlere ve türlere (genre) bağlanır. AI ile otomatik kapak görseli oluşturulabilir.
Müzik dosyaları HLS encryption ile şifrelenir. Yani müzikler doğrudan indirilemez, sadece platform üzerinden dinlenebilir. Bu sayede telif hakları korunur.
Her kullanıcı aynı anda sadece belirli sayıda cihazdan dinleme yapabilir. Yeni cihazdan giriş yapılınca en eski cihaz otomatik çıkış yapar (LIFO sistemi). Bu Netflix'teki sistem gibi çalışır.
Yapay zeka ile otomatik playlist oluşturma, müzik önerisi, şarkı kapağı üretimi. Kullanıcılar AI ile sohbet ederek "hüzünlü şarkılar listesi oluştur" gibi isteklerde bulunabilir.
Otomatik çalan radyo kanalları. Her radyo belirli sektörlere (kahvehane, restoran, spor salonu) özel müzik akışı yapar. Kurumsal müşteriler için özel hesap ve spot reklam sistemi var.
Kullanıcılar şarkıları, albümleri, playlistleri favorilerine ekleyebilir. Yıldız vererek değerlendirme yapabilir. Yorum sistemleri entegre edilmiş.
Her şarkının kaç kez dinlendiği kaydedilir. Kullanıcı geçmişi takip edilir. En çok dinlenen şarkılar, trendler otomatik oluşturulur.
Şarkı isimleri, açıklamalar, kategoriler 3 dilde (Türkçe, İngilizce, Arapça) saklanabilir. Kullanıcı diline göre otomatik gösterilir.
Modules/Muzibu/ ├── App/ │ ├── Console/Commands/ # Artisan komutları │ ├── DataTransferObjects/ # DTO pattern │ ├── Enums/ # Enum sınıfları │ ├── Events/ # Event listeners │ ├── Exceptions/ # Custom exceptions │ ├── Helpers/ # Helper functions │ ├── Http/ │ │ ├── Controllers/ │ │ │ ├── Admin/ # Admin panel (16 controller) │ │ │ ├── Api/ # REST API (14 controller) │ │ │ └── Front/ # Frontend │ │ ├── Livewire/ │ │ │ ├── Admin/ # Livewire components │ │ │ └── Traits/ │ │ ├── Middleware/ # Custom middleware │ │ └── Resources/ # API resources │ ├── Jobs/ # Queue jobs │ ├── Models/ # Eloquent models (15 model) │ ├── Observers/ # Model observers │ ├── Repositories/ # Repository pattern │ ├── Services/ # Business logic (14 service) │ ├── Traits/ # Reusable traits │ └── View/Composers/ # View composers ├── config/ # Module config ├── database/ │ ├── factories/ # Model factories │ ├── migrations/ │ │ └── tenant/ # Tenant migrations (17+) │ └── seeders/ # Database seeders ├── lang/ # Translations (tr, en, ar) ├── resources/ │ ├── css/ # Module CSS │ ├── js/ # Module JS │ └── views/ # Blade templates (104 files) │ ├── admin/ │ ├── certificate/ │ ├── components/ │ ├── front/ │ ├── livewire/ │ └── themes/ └── routes/ ├── admin.php # Admin routes (15.5KB) ├── api.php # API routes (18.6KB) └── web.php # Web routes (12.4KB)
Core Models
Song.php
→
Şarkı modeli (29,809 bytes)
Album.php
→
Albüm modeli (18,285 bytes)
Artist.php
→
Sanatçı modeli (15,203 bytes)
Genre.php
→
Tür modeli (13,208 bytes)
Playlist.php
→
Playlist modeli (31,468 bytes)
Support Models
Radio.php
→
Radyo kanalları (13,246 bytes)
Sector.php
→
Sektör kategorileri (12,881 bytes)
SongPlay.php
→
Dinleme kayıtları (7,952 bytes)
PlaylistSong.php
→
Pivot table (1,792 bytes)
CorporateSpot.php
→
Kurumsal spot reklamlar (7,440 bytes)
CorporateSpotPlay.php
→
Spot yayın kayıtları (9,955 bytes)
MuzibuCorporateAccount.php
→
Kurumsal hesaplar (7,269 bytes)
Certificate.php
→
Sertifikalar (4,084 bytes)
AbuseReport.php
→
İstismar raporları (5,731 bytes)
Core Services
SongService.php (4,328 bytes)AlbumService.php (5,169 bytes)ArtistService.php (6,476 bytes)PlaylistService.php (20,825 bytes)GenreService.php (4,380 bytes)RadioService.php (4,380 bytes)SectorService.php (4,414 bytes)Feature Services
DeviceService.php (28,894 bytes) - Cihaz limit yönetimiMuzibuCacheService.php (9,356 bytes) - Cache stratejisiAbuseDetectionService.php (25,290 bytes) - İstismar tespitiMuzibuLeonardoAIService.php (15,424 bytes) - AI cover generationCertificateService.php (6,331 bytes) - Sertifika üretimiCorporateSubscriptionService.php (7,413 bytes)MuzibuCorporateService.php (3,973 bytes)API Controllers (14)
SongController.php (20,037 bytes)SongStreamController.php (34,109 bytes)PlaylistController.php (29,833 bytes)QueueRefillController.php (46,997 bytes)AlbumController.php (5,631 bytes)ArtistController.php (7,641 bytes)GenreController.php (3,179 bytes)RadioController.php (3,197 bytes)SectorController.php (4,132 bytes)PlayController.php (7,998 bytes)DeviceController.php (2,917 bytes)RatingController.php (3,142 bytes)PlaylistManagementController.phpAdmin Controllers (16)
SongController.phpAlbumController.phpArtistController.phpGenreController.phpPlaylistController.php (12,129 bytes)RadioController.phpSectorController.phpDashboardController.phpListeningHistoryController.phpStatsController.phpAbuseReportController.php (7,470 bytes)CertificateController.phpCorporateController.phpSpotController.phpUserPlaylistController.phpAICoverController.phpFrontend Controllers
SongController.phpAlbumController.phpArtistController.phpPlaylistController.phpRadioController.phpGenreController.phpTeknoloji: HTTP Live Streaming (HLS) + AES-128 Encryption
1. Şarkı Yükleme Süreci
encryption_key ve encryption_iv database'e kaydedilir2. Streaming Süreci
GET /api/muzibu/songs/{id}/stream endpoint'ini çağırır3. Güvenlik Katmanları
⚠️ Önemli Not
HLS encryption sayesinde müzik dosyaları browser'dan direkt indirilemez. DevTools'da görünen .ts dosyaları şifrelenmiş parçalardır, tek başlarına çalışmazlar.
Service: DeviceService.php (28,894 bytes)
Nasıl Çalışır?
mzb_login_token cookie'si atanırCache::lock() kullanılırAPI Endpoints
GET /api/auth/active-devicesPOST /api/auth/terminate-deviceGET /api/auth/check-session
Location: Modules/Muzibu/database/migrations/tenant/
Count: 17+ migration dosyası
| Tablo | Önemli Alanlar | İlişkiler |
|---|---|---|
muzibu_songs |
title (JSON), lyrics (JSON), duration, file_path, hls_path, encryption_key, encryption_iv | album_id, genre_id, media_id |
muzibu_albums |
title (JSON), description (JSON), release_year | artist_id, genre_id, media_id |
muzibu_artists |
title (JSON), biography (JSON) | media_id |
muzibu_genres |
title (JSON), description (JSON), color_code | media_id |
muzibu_playlists |
title (JSON), description (JSON), is_system, is_public, is_radio, is_featured | user_id, media_id |
muzibu_playlist_song |
order (sıralama) | playlist_id, song_id |
muzibu_radios |
title (JSON), description (JSON), stream_url | media_id |
muzibu_sectors |
title (JSON), description (JSON) | media_id |
muzibu_song_plays |
played_at, duration_played, completed | song_id, user_id |
💡 JSON Columns
title, slug, description, lyrics gibi alanlar JSON formatında saklanır. Bu sayede Türkçe, İngilizce, Arapça çeviriler tek kolonda tutulur. HasTranslations trait ile otomatik dil yönetimi yapılır.
Playlist Endpoints
GET /api/muzibu/playlists - Tüm playlistlerGET /api/muzibu/playlists/featured - Öne çıkan playlistlerGET /api/muzibu/playlists/my-playlists - Kullanıcının listeleri (auth)GET /api/muzibu/playlists/{id} - Playlist detayıPOST /api/muzibu/playlists/quick-create - Hızlı liste oluştur (auth)POST /api/muzibu/playlists/clone - Liste klonla (auth)POST /api/muzibu/playlists/{id}/add-song - Şarkı ekle (auth)POST /api/muzibu/playlists/{id}/add-album - Albüm ekle (auth)DELETE /api/muzibu/playlists/{id}/remove-song/{songId} - Şarkı çıkar (auth)PUT /api/muzibu/playlists/{id}/reorder - Sıralama değiştir (auth)PUT /api/muzibu/playlists/{id} - Liste güncelle (auth)DELETE /api/muzibu/playlists/{id} - Liste sil (auth)
Song Endpoints
GET /api/muzibu/songs - Tüm şarkılarGET /api/muzibu/songs/featured - Öne çıkan şarkılarGET /api/muzibu/songs/latest - En yeni şarkılarGET /api/muzibu/songs/trending - Trend şarkılarGET /api/muzibu/songs/{id} - Şarkı detayıGET /api/muzibu/songs/{id}/stream - HLS stream URLPOST /api/muzibu/songs/{id}/play - Dinleme kaydı oluştur
Album & Artist Endpoints
GET /api/muzibu/albumsGET /api/muzibu/albums/{id}GET /api/muzibu/artistsGET /api/muzibu/artists/{id}
Queue & Radio Endpoints
POST /api/muzibu/queue/refill - Sıra doldurma (infinite queue)GET /api/muzibu/radiosGET /api/muzibu/radios/{id}
Other Endpoints
GET /api/muzibu/search - Arama (Meilisearch)GET /api/muzibu/genresGET /api/muzibu/sectorsPOST /api/muzibu/rating/toggle - Yıldız verme (auth)
🔒 Auth Middleware
(auth) işaretli endpoint'ler middleware(['web', 'auth']) koruması altındadır.
Sanctum token veya session gerektirir. Rate limiting tüm route'larda aktif: throttle.user:api
File: Modules/Muzibu/helpers.php
muzibu_generate_ai_cover()
Muzibu model'leri için otomatik Leonardo AI görsel üretimi. Queue job olarak çalışır.
muzibu_generate_ai_cover($song, $song->title, 'song');
Core Traits (App/Traits)
HasTranslations - Çok dilli alan desteğiHasSeo - SEO meta yönetimiHasUniversalSchemas - Schema.org markupModule Traits
HasMediaManagement - Spatie mediaHasFavorites - Favori sistemiHasReviews - Rating & reviewHasCachedCounts - Cache'd countersAdmin panel için Livewire 3 ile reactive component'ler:
371
PHP Dosyası
104
Blade Template
~10.5k
Satır (Services)
15
Eloquent Model
14
Service Class
30+
Controller
getConnectionName() ile 'tenant' connection zorlanmışdatabase/migrations/tenant/ altında