Muzibu Module

Muzibu Modülü Detaylı Analizi

Müzik Streaming Platformu - Teknik ve İşlevsel İnceleme

📊 Hızlı Özet

371

PHP Dosyası

15

Model

14

Service

3.8M

Toplam Boyut

📝 Basit Anlatım (Herkes İçin)

Muzibu Modülü Nedir?

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.

Ana Özellikler

🎵 Şarkı Yönetimi

Ş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.

🔒 Güvenli Streaming

Müzik dosyaları HLS encryption ile şifrelenir. Yani müzikler doğrudan indirilemez, sadece platform üzerinden dinlenebilir. Bu sayede telif hakları korunur.

📱 Cihaz Limiti

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.

🤖 AI Destekli Özellikler

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.

📻 Radyo ve Sektörler

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.

Favori ve Değerlendirme

Kullanıcılar şarkıları, albümleri, playlistleri favorilerine ekleyebilir. Yıldız vererek değerlendirme yapabilir. Yorum sistemleri entegre edilmiş.

📊 Dinleme İstatistikleri

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.

🌍 Çok Dilli Destek

Şarkı isimleri, açıklamalar, kategoriler 3 dilde (Türkçe, İngilizce, Arapça) saklanabilir. Kullanıcı diline göre otomatik gösterilir.

Kullanıcı Deneyimi Akışı

  1. 1 Giriş yapılır: Kullanıcı cihaz limiti kontrol edilir, cookie ile cihaz tanımlanır
  2. 2 Müzik keşfi: Ana sayfada öne çıkan şarkılar, albümler, playlistler gösterilir
  3. 3 Şarkı seçimi: Şarkıya tıklanınca HLS stream başlar, encryption key ile şifreli akış yapılır
  4. 4 Queue sistemi: Şarkı bitince otomatik sıradaki çalar, infinite queue ile liste bitmez
  5. 5 Playlist oluşturma: Beğenilen şarkılar playlist'e eklenir, AI ile otomatik liste oluşturulabilir
  6. 6 İstatistik kaydı: Her dinleme song_plays tablosuna yazılır, cache'e sayılar atılır

Neden Önemli?

  • Telif koruması: HLS encryption ile müzikler güvende, illegal paylaşım önlenir
  • Kurumsal çözüm: Kafeler, restoranlar için özel müzik yayını sunulabilir
  • Ölçeklenebilir: Modern teknolojiler ile büyük kullanıcı sayısına hizmet verebilir
  • AI entegrasyonu: Kullanıcı deneyimini yapay zeka ile zenginleştiriyor

🔧 Teknik Detaylar (Geliştiriciler İçin)

Modül Yapısı

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)
                        

Model'ler (15 Adet)

Core Models

Song.php Şarkı modeli (29,809 bytes)
  • • Traits: Sluggable, HasTranslations, HasSeo, HasMediaManagement, HasFavorites, HasReviews, Searchable
  • • Relations: album, genre, playlists, plays
  • • Fields: title, lyrics, duration, file_path, hls_path, encryption_key, encryption_iv
  • • Media Collections: hero (cover), audio (encrypted HLS)
Album.php Albüm modeli (18,285 bytes)
  • • Relations: artist, genre, songs
  • • Fields: title, description, release_year, media_id
Artist.php Sanatçı modeli (15,203 bytes)
  • • Relations: albums, songs, genres
  • • Fields: title, biography, media_id
Genre.php Tür modeli (13,208 bytes)
  • • Relations: songs, albums, artists
  • • Fields: title, description, media_id, color_code
Playlist.php Playlist modeli (31,468 bytes)
  • • Relations: user, songs (many-to-many), playlistables (polymorphic)
  • • Fields: title, description, is_system, is_public, is_radio, is_featured
  • • Methods: addSong(), removeSong(), reorderSongs()

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)

Service Layer (14 Service - 10,495 satır kod)

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önetimi
  • MuzibuCacheService.php (9,356 bytes) - Cache stratejisi
  • AbuseDetectionService.php (25,290 bytes) - İstismar tespiti
  • MuzibuLeonardoAIService.php (15,424 bytes) - AI cover generation
  • CertificateService.php (6,331 bytes) - Sertifika üretimi
  • CorporateSubscriptionService.php (7,413 bytes)
  • MuzibuCorporateService.php (3,973 bytes)

Controller'lar

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.php

Admin Controllers (16)

  • SongController.php
  • AlbumController.php
  • ArtistController.php
  • GenreController.php
  • PlaylistController.php (12,129 bytes)
  • RadioController.php
  • SectorController.php
  • DashboardController.php
  • ListeningHistoryController.php
  • StatsController.php
  • AbuseReportController.php (7,470 bytes)
  • CertificateController.php
  • CorporateController.php
  • SpotController.php
  • UserPlaylistController.php
  • AICoverController.php

Frontend Controllers

  • SongController.php
  • AlbumController.php
  • ArtistController.php
  • PlaylistController.php
  • RadioController.php
  • GenreController.php

HLS Encryption Sistemi

Teknoloji: HTTP Live Streaming (HLS) + AES-128 Encryption

1. Şarkı Yükleme Süreci

  • • Admin panel'den .mp3/.wav dosyası yüklenir
  • • FFmpeg ile HLS formatına dönüştürülür (.m3u8 + .ts segments)
  • • Her segment için unique AES-128 encryption key üretilir
  • encryption_key ve encryption_iv database'e kaydedilir
  • • Orijinal dosya silinir, sadece encrypted segments saklanır

2. Streaming Süreci

  • • Frontend GET /api/muzibu/songs/{id}/stream endpoint'ini çağırır
  • • Auth token ve device validation yapılır
  • • Encryption key database'den okunur
  • • Signed URL ile time-limited .m3u8 playlist döndürülür
  • • HLS.js player ile stream başlatılır
  • • Her segment isteği auth check'ten geçer

3. Güvenlik Katmanları

  • • ✓ AES-128 encryption ile dosya koruması
  • • ✓ Signed URLs (expiry time ile otomatik geçersiz olma)
  • • ✓ Authentication middleware (her istek token kontrolü)
  • • ✓ Device limit check (LIFO sistemi)
  • • ✓ Rate limiting (abuse prevention)
  • • ✓ Hotlink protection (domain check)

⚠️ Ö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.

Device Limit Sistemi (LIFO)

Service: DeviceService.php (28,894 bytes)

Nasıl Çalışır?

  1. 1. Cookie-based Detection: Her tarayıcıya unique mzb_login_token cookie'si atanır
  2. 2. Login Check: Kullanıcı giriş yaptığında aktif cihaz sayısı kontrol edilir
  3. 3. LIFO Logic: Limit aşılırsa en eski cihaz otomatik logout edilir
  4. 4. Distributed Lock: Race condition'a karşı Cache::lock() kullanılır
  5. 5. Atomic Termination: DB + Redis + Cache senkron temizlenir

API Endpoints

  • GET /api/auth/active-devices
  • → Kullanıcının aktif cihazlarını listeler
  • POST /api/auth/terminate-device
  • → Belirli cihazı manuel kapatma
  • GET /api/auth/check-session
  • → Session geçerlilik kontrolü

Veritabanı Şeması (Tenant Database)

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.

API Endpoints (routes/api.php - 18.6KB)

Playlist Endpoints

GET /api/muzibu/playlists - Tüm playlistler
GET /api/muzibu/playlists/featured - Öne çıkan playlistler
GET /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ılar
GET /api/muzibu/songs/featured - Öne çıkan şarkılar
GET /api/muzibu/songs/latest - En yeni şarkılar
GET /api/muzibu/songs/trending - Trend şarkılar
GET /api/muzibu/songs/{id} - Şarkı detayı
GET /api/muzibu/songs/{id}/stream - HLS stream URL
POST /api/muzibu/songs/{id}/play - Dinleme kaydı oluştur

Album & Artist Endpoints

GET /api/muzibu/albums
GET /api/muzibu/albums/{id}
GET /api/muzibu/artists
GET /api/muzibu/artists/{id}

Queue & Radio Endpoints

POST /api/muzibu/queue/refill - Sıra doldurma (infinite queue)
GET /api/muzibu/radios
GET /api/muzibu/radios/{id}

Other Endpoints

GET /api/muzibu/search - Arama (Meilisearch)
GET /api/muzibu/genres
GET /api/muzibu/sectors
POST /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

Helper Functions

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');

Kullanılan Trait'ler

Core Traits (App/Traits)

  • HasTranslations - Çok dilli alan desteği
  • HasSeo - SEO meta yönetimi
  • HasUniversalSchemas - Schema.org markup

Module Traits

  • HasMediaManagement - Spatie media
  • HasFavorites - Favori sistemi
  • HasReviews - Rating & review
  • HasCachedCounts - Cache'd counters

Livewire Components

Admin panel için Livewire 3 ile reactive component'ler:

  • • Song management (CRUD + bulk operations)
  • • Album management
  • • Artist management
  • • Playlist management (drag & drop reorder)
  • • Real-time statistics dashboard

✨ Öne Çıkan Özellikler

✅ Güvenlik

  • • HLS AES-128 encryption
  • • Signed URLs (time-limited)
  • • Device limit (LIFO)
  • • Distributed locking
  • • Rate limiting
  • • Abuse detection system

⚡ Performans

  • • Redis caching (MuzibuCacheService)
  • • Eager loading (N+1 prevention)
  • • Meilisearch full-text search
  • • Queue jobs (async processing)
  • • CDN-ready media serving
  • • Database indexing

🤖 AI Features

  • • Auto cover generation (Leonardo AI)
  • • Genre-based prompt templates
  • • Smart playlist creation
  • • Music recommendation
  • • Context-aware chat

🌍 Multi-Language

  • • JSON-based translations
  • • Supported: TR, EN, AR
  • • Auto language detection
  • • Fallback mechanism
  • • SEO-friendly URLs per language

📈 Kod İstatistikleri

371

PHP Dosyası

104

Blade Template

~10.5k

Satır (Services)

15

Eloquent Model

14

Service Class

30+

Controller

💡 Geliştirme Notları

✅ İyi Pratikler

  • • Service layer pattern ile business logic ayrıştırılmış
  • • Repository pattern kısmen kullanılmış
  • • Trait-based modular yapı
  • • Queue jobs ile async processing
  • • Comprehensive test coverage için factory'ler hazır

📌 Tenant Awareness

  • MUTLAK KURAL: Muzibu modülü SADECE Tenant 1001 için!
  • • Model'lerde getConnectionName() ile 'tenant' connection zorlanmış
  • • Migration'lar database/migrations/tenant/ altında
  • • Central DB'ye ASLA veri yazılmamalı
  • • Route'larda tenant middleware aktif

⚠️ Dikkat Edilmesi Gerekenler

  • • HLS segment'leri storage'da büyük yer kaplıyor, periyodik cleanup gerekebilir
  • • AI cover generation job'ları Leonardo AI API kredisi tüketir
  • • Meilisearch index'lerini güncel tutmak için Scout sync gerekli
  • • Device limit cookie'si httponly + secure flag ile korunmalı
  • • Rate limiting değerleri production'da ayarlanmalı

🚫 Yapılmaması Gerekenler

  • • Muzibu model'lerini başka tenant'larda kullanma
  • • Encryption key'leri plain text olarak loglama
  • • HLS segment'leri public URL ile direkt expose etme
  • • Device limit'i bypass etmeye çalışma
  • • Migration olmadan manuel schema değişikliği