🎵 Business Background Music System

İşletmeler İçin Sınırsız Otomatik Müzik Sistemi - Master Implementation Plan

📅 5 Aralık 2025 🎯 Tenant 1001: muzibu.com 👤 B2B Müzik Platformu

🎯 Sistem Özeti

Temel Prensip: "Set & Forget"

Barista/Garson/İşletme Sahibi: Sabah açar, "Başlat" tuşuna basar.
Sistem: Akşama kadar hiç durmadan, hiç müdahale gerektirmeden otomatik müzik çalar.
Kullanıcı: Siteye tekrar girmesine bile gerek kalmaz.

💡 Örnek: Kafe sahibi 08:00'de "Kafe Modu" seçer → 23:00'e kadar Jazz, Blues, Indie karışımı müzik sürekli çalar
🕌

Cami Modu

Sadece Tasavvufi (İlahi) müzik. ASLA başka genre karışmaz.

🇹🇷

Meyhane Modu

Halk, TSM, Türkçe. Türk kültürüne uygun müzik.

🎸

Rock Bar Modu

Rock, Metal. Yüksek enerjili müzik.

🚨 Kritik Sorun: Genre Uyumsuzluğu

❌ Felaket Senaryosu

Cami'de: İlahi çalarken araya Hard Rock karışırsa → SKANDAL!

Meyhane'de: Türk müziği çalarken araya İlahi karışırsa → SAYGISIZLİK!

Fine Dining'de: Lounge çalarken araya Metal karışırsa → MÜŞTERİ KAYBI!

✅ Çözüm: Genre Uyumluluk Grupları

32 genre'ı 6 uyumluluk grubuna ayırıyoruz. Her grup kendi kurallarına göre çalışır:

🔒

STRICT MODE

ASLA başka grupla karışmaz

  • • Grup 1: Dini/Manevi (İlahi, Tasavvuf)
  • • Grup 2: Rock Ailesi (Rock, Metal)
  • • Grup 3: Türk Müzikleri (Halk, TSM)
  • • Grup 6: Enerjik/Gym (Electro, Rap)
🔓

FLEXIBLE MODE

Belirli gruplarla mix edilebilir

  • • Grup 4: Sakin/Restoran (Jazz, Classical)
  • • Grup 5: Kafe/Rahat (Blues, Indie)

↔ Grup 4 ve 5 birbirleriyle karışabilir

🗄️ Mevcut Veritabanı Yapısı

📁

muzibu_mayis25.sql

30,000 Şarkı

Gerçek veritabanı dökümü analiz edildi. Mevcut yapı kullanılacak, yeni tablo oluşturulmayacak!

📊 muzibu_songs Tablosu

song_id (Primary Key)
title_tr (Şarkı adı)
genre_id (TEK GENRE!)
duration (Süre)
file_path (Dosya yolu)
play_count (Çalınma sayısı)
active (Aktif/Pasif)

⚠️ Her şarkının TEK genre_id var!

🎭 muzibu_genres Tablosu

genre_id (Primary Key)
title_tr (Genre adı)
slug (URL slug)
description_tr (Açıklama)

✅ 32 Genre mevcut (Tasavvufi ID: 27)

💡 Çözüm: Code-Based Genre Groups

Yeni tablo oluşturmak yerine, PHP config dosyasında genre gruplarını tanımlayacağız. 30K eski şarkı aynen kullanılabilecek!

🏗️ Teknik Mimari

1

config/genre_groups.php

32 genre'ı 6 gruba ayıran yapılandırma dosyası. Her grup için strict/flexible modlar ve mix kuralları.

Örnek: 'religious' => ['genres' => [27], 'strict' => true, 'can_mix_with' => []]
2

app/Helpers/GenreHelper.php

Genre uyumluluk mantığını yöneten helper sınıfı. Verilen genre ID için izin verilen genre'leri döner.

Fonksiyon: getAllowedGenres(27) → [27] (Tasavvufi strict, sadece kendisi)
Fonksiyon: getAllowedGenres(9) → [2, 8, 9, 17, 25, 1, 3, 6, 31] (Jazz flexible, calm+cafe mix)
3

Backend API Endpoints

Frontend'in genre uyumluluğunu kontrol etmesi ve queue'yu doldurması için API'ler.

GET /api/business/allowed-genres/{genreId}
→ İzin verilen genre ID'lerini döner
POST /api/business/queue/refill
→ Allowed genres'dan rastgele 10 şarkı döner
4

Frontend: player-core.js refillQueue()

Queue 5 şarkıya indiğinde otomatik tetiklenen mantık. Genre uyumluluğunu koruyarak yeni şarkılar ekler.

1. Son 5 şarkının genre_id'lerini al
2. En çok tekrar eden genre_id'yi bul
3. Backend'den izin verilen genre'leri al
4. İzin verilen genre'lerden rastgele 10 şarkı al
5. Queue'ya ekle → Müzik sürüyor!

♾️ Infinite Queue Akışı

🔄 Otomatik Refill Mantığı

1

Başlangıç: Kullanıcı "Cami Modu" seçer → İlk 15 Tasavvufi şarkı yüklenir

2

Oynatma: Şarkılar sırayla çalar, queue azalır → 15 → 10 → 7 → 5 şarkı!

3

Tetikleyici: Queue <= 5 şarkı → refillQueue() otomatik çalışır!

4

Analiz: Son 5 şarkının tamamı genre_id=27 (Tasavvufi) → En çok 27 tekrar ediyor

5

Backend API: getAllowedGenres(27) → [27] döner (strict mode, sadece Tasavvufi)

6

Refill API: Genre 27'den rastgele 10 şarkı çek → Queue'ya ekle

7

Sonuç: Queue 5 → 15 şarkı oldu, müzik hiç durmadı! ✅

8

Döngü: Queue tekrar 5'e indiğinde → Adım 3'e dön → Sonsuz loop!

✅ Garanti: ASLA Yanlış Genre Karışmaz!

Cami modunda çalarken SADECE Tasavvufi şarkılar gelir. Rock, Metal, Pop hiçbir zaman queue'ya eklenemez çünkü getAllowedGenres(27) → [27]

📋 Implementation Adımları

1

Phase 1: Genre Uyumluluk Sistemi

📁 config/genre_groups.php oluştur

32 genre → 6 grup mapping, strict/flexible kurallar

🔧 app/Helpers/GenreHelper.php oluştur

getAllowedGenres(), getGenreGroup(), areCompatible() fonksiyonları

🧪 Test: Tasavvufi (27) strict isolation

getAllowedGenres(27) → [27] döndüğünü doğrula

2

Phase 2: Backend API

🎛️ BusinessMusicController oluştur

getAllowedGenres(), refillQueue(), getGenreGroups() endpoints

🛣️ routes/api.php güncelle

/api/business/* route'ları ekle

🧪 Test: API endpoints

Postman ile GET/POST test et

3

Phase 3: Frontend Infinite Queue

🎵 player-core.js refillQueue() fonksiyonu

Queue <= 5 tetikleyici, genre analysis, API calls

🔄 Auto-refill loop implementasyonu

setInterval() ile queue kontrolü, automatic trigger

🧪 Test: Cami modu infinite play

15 şarkı başlat, 5'e düşünce refill olduğunu gör

4

Phase 4: Business Category UI

🎨 Business mode selection sayfası

Cami, Meyhane, Rock Bar, Kafe, Restoran, Gym butonları

💾 LocalStorage preference kaydet

Kullanıcı bir kez seçsin, sonraki açılışlarda hatırlasın

🧪 Test: Tüm business categories

Her mod için genre mix'i doğrula

🧪 Test Senaryoları

Test 1: Cami Modu Strict Isolation

1. Cami modu seç

2. İlk 15 şarkı → Tamamı Tasavvufi (genre_id: 27)

3. Queue 5'e düşsün

4. Refill → Yine Tasavvufi

✅ Beklenen: ASLA Rock/Metal/Pop karışmaz

Test 2: Kafe Modu Flexible Mix

1. Kafe modu seç

2. İlk şarkılar: Blues, Indie, Folk (Grup 5)

3. Queue 5'e düşsün

4. Refill → Jazz, Classical da gelebilir (Grup 4 mix)

✅ Beklenen: Sakin + Kafe karışımı, Rock/İlahi YOK

Test 3: Meyhane Modu Türk Müzikleri

1. Meyhane modu seç

2. İlk şarkılar: Halk, TSM, Türkçe (Grup 3)

3. Queue 5'e düşsün

4. Refill → Yine Türk müzikleri

✅ Beklenen: SADECE Türk müziği, İlahi/Rock YOK

Test 4: Infinite Loop (8 Saat)

1. Herhangi bir mod seç

2. Sabah 08:00 başlat

3. Hiç dokunma, bırak çalsın

4. Saat 16:00'da kontrol et

✅ Beklenen: 8 saat hiç durmadan çaldı

⚠️ Potansiyel Riskler ve Çözümleri

Risk 1: Bir Genre'de Yeterli Şarkı Yoksa?

Senaryo: Tasavvufi genre'de sadece 8 şarkı var, queue sürekli aynı şarkıları çalar.

Çözüm: Backend API'de available_count bilgisi dön. Eğer < 20 şarkı varsa kullanıcıya uyarı göster: "Bu kategoride az şarkı var, tekrar edebilir."

Risk 2: API Hatası Olursa Müzik Durur mu?

Senaryo: Refill API çağrısı 500 error döner, queue boşalır, müzik durur.

Çözüm: Frontend'de retry logic ekle. API 3 kez dene, başarısız olursa queue'daki eski şarkılardan rastgele ekle (fallback).

Risk 3: Kullanıcı Tab'ı Kapatırsa?

Senaryo: İşletme sahibi yanlışlıkla tarayıcı tab'ını kapatır, müzik durur.

Çözüm: beforeunload event'i ile kullanıcıya uyarı göster: "Müzik durabilir, emin misiniz?"

Risk 4: Internet Bağlantısı Kesilirse?

Senaryo: Kafe'nin internet bağlantısı 5 dakika kesilir, yeni şarkı yükleyemez.

Çözüm: Queue her zaman minimum 15 şarkı tutsun (5'te refill, ama 10 ekle). 15 şarkı x 3dk ortalama = 45 dakika buffer → Internet döner.

🚀 Gelecek Özellikler (Phase 5+)

🕐

Zaman Dilimi Müziği

Sabah 08-12: Sakin müzik, Öğle 12-17: Orta tempo, Akşam 17-23: Enerjik müzik. Otomatik geçiş.

📊

İşletme Analytics

Hangi saatlerde hangi genre çalındı? Müşteri yoğunluğu ile korelasyon? Veri analitiği.

🎚️

Tempo Kontrolü

"Sadece yavaş şarkılar" veya "Sadece hızlı şarkılar" seçeneği. BPM (Beats Per Minute) filtreleme.

🚫

Blacklist/Whitelist

İşletme sahibi belirli şarkıları/albümleri blacklist yapabilsin. "Bu şarkı asla çalmasın."

📌 Özet

1. Genre uyumluluk sistemi ile skandal senaryoları engelledik (İlahi + Rock karışımı artık imkansız)

2. Mevcut 30K şarkılı database'i hiç değiştirmeden kullanıyoruz (Code-based config çözümü)

3. Infinite queue sistemi ile sınırsız otomatik müzik (Sabah başlat, akşama kadar çalar)

4. 4 fazlı implementation planı ile hatasız, temkinli ilerleme (Her faz test edilecek)

✅ Sistem hazır! Implementation'a başlayabilirsin.