FINAL v5 31 Aralık 2025

Muzibu Corporate Spots Sistemi

Kurumsal hesaplar için şarkı arası sesli spot yayın sistemi

Tüm Kararlar (Final)

Spot Atlanabilir

Skip serbest, zorlama yok.

Tarih Aralığı

Admin + Ana şube tarih belirler.

Özel Sıralama

Admin + Ana şube sıralama belirler.

localStorage Sayaç

Performans öncelikli.

Max 30 MB

Dosya boyutu limiti.

Süre Limiti Yok

Admin ne yüklerse o.

Override Sistemi

Kurum Admin'i override edebilir.

3 Katman Kontrol

Admin → Corporate → Şube

Veritabanı Yapısı

YENİ: muzibu_corporate_spots (Admin'in yüklediği spotlar)

Kolon Tip Açıklama
id BIGINT PK Auto increment
title VARCHAR(255) Spot başlığı
audio_path VARCHAR(500) Dosya yolu
duration INT Saniye
file_size INT Bytes
position INT DEFAULT 0 Admin sıralaması (global default)
starts_at TIMESTAMP NULL Admin başlangıç tarihi (NULL = her zaman)
ends_at TIMESTAMP NULL Admin bitiş tarihi (NULL = süresiz)
is_active BOOLEAN DEFAULT TRUE Admin kontrolü (false = hiçbir yerde çalmaz)
play_count INT DEFAULT 0 Toplam çalınma
timestamps TIMESTAMP created_at, updated_at

YENİ: muzibu_corporate_spot_schedules (Kurum bazlı override)

Kolon Tip Açıklama
id BIGINT PK Auto increment
spot_id BIGINT FK Hangi spot
corporate_account_id BIGINT FK Hangi kurum (ana şube)
position INT NULL Kurum sıralaması (NULL = Admin'inki)
starts_at TIMESTAMP NULL Kurum başlangıç (NULL = Admin'inki)
ends_at TIMESTAMP NULL Kurum bitiş (NULL = Admin'inki)
is_enabled BOOLEAN DEFAULT TRUE Kurum kontrolü (false = bu kurumda çalmaz)
timestamps TIMESTAMP created_at, updated_at
UNIQUE (spot_id, corporate_account_id)
INDEX (corporate_account_id)

YENİ: muzibu_corporate_spot_plays (Çalınma logları)

Kolon Tip Açıklama
id BIGINT PK
spot_id BIGINT FK Hangi spot
corporate_account_id BIGINT FK Hangi şube
user_id BIGINT FK NULL Kim dinledi
was_skipped BOOLEAN DEFAULT FALSE Atlandı mı?
played_at TIMESTAMP Ne zaman

GÜNCELLEME: muzibu_corporate_accounts (4 kolon ekleme)

spot_enabled BOOLEAN DEFAULT TRUE       -- Ana şube: Sistem açık mı?
spot_songs_between INT DEFAULT 10       -- Ana şube: Kaç şarkıda bir?
spot_current_index INT DEFAULT 0        -- Rotation index
spot_is_paused BOOLEAN DEFAULT FALSE    -- Her şube: Durduruldu mu?

Veritabanı Özeti

3

Yeni Tablo

+4

Kolon

Override

Sistem

Esnek

Yapı

Kontrol & Override Yapısı

3 Katmanlı Kontrol Hiyerarşisi

1. Admin

Global kontrol

• is_active (spot bazlı)

• position (global sıra)

• starts_at / ends_at

2. Ana Şube

Kurum bazlı override

• spot_enabled (kurum)

• is_enabled (spot bazlı)

• position (kurum sırası)

• starts_at / ends_at

3. Şube

Şube bazlı durdur

• spot_is_paused

(sadece durdur/devam)

Override Mantığı

Tarih Override
Kurum tarihi varsa → Kurum tarihi geçerli
Kurum tarihi NULL → Admin tarihi geçerli
Her ikisi NULL → Her zaman aktif
COALESCE(schedule.starts_at, spot.starts_at)
Sıralama Override
Kurum sırası varsa → Kurum sırası geçerli
Kurum sırası NULL → Admin sırası geçerli
COALESCE(schedule.position, spot.position)

Spot Çalması İçin Tüm Koşullar

-- Spot çalabilir mi?
WHERE spot.is_active = TRUE                                    -- Admin aktif
  AND corporate.spot_enabled = TRUE                            -- Kurum aktif
  AND branch.spot_is_paused = FALSE                            -- Şube durdurulmamış
  AND (schedule.is_enabled IS NULL OR schedule.is_enabled = TRUE)  -- Kurum spot'u kapatmamış
  AND (
    COALESCE(schedule.starts_at, spot.starts_at) IS NULL
    OR COALESCE(schedule.starts_at, spot.starts_at) <= NOW()
  )
  AND (
    COALESCE(schedule.ends_at, spot.ends_at) IS NULL
    OR COALESCE(schedule.ends_at, spot.ends_at) >= NOW()
  )
ORDER BY COALESCE(schedule.position, spot.position)

Kontrol Matrisi

Admin Corporate Spot (Kurum) Şube Tarih Sonuç
❌ Pasif - - - - ÇALMAZ
❌ Kapalı - - - ÇALMAZ
❌ Devre dışı - - ÇALMAZ
⏸ Durdu - ÇALMAZ
Geçmemiş/Geçmiş ÇALMAZ
Tarih OK ÇALAR ✓

Admin Panel

Spot Listesi

Corporate Spots
Sıra Spot Tarih Aralığı Süre Durum İşlem
1

Yılbaşı Kampanyası

1.2 MB

25 Ara - 05 Oca

0:45 Aktif
2

Genel Duyuru

0.8 MB

Süresiz

0:30 Aktif

Spot Yükleme / Düzenleme Formu

Dosyayı sürükle veya tıkla

Max 30 MB

Boş = Her zaman

Boş = Süresiz

Yılbaşı Kampanyası

kampanya.mp3

0:00 0:45

Süre

0:45

Boyut

1.2 MB

Format

MP3

Kurumsal Panel (Ana Şube)

Spot Yönetimi (Ana Şube)

Kurumsal Spot Ayarları

Spotları kurum için özelleştirin

Spot Sistemi

Tüm şubelerde

Kaç şarkıda bir? 10
Spotları Yönet
1

Yılbaşı Kampanyası

Admin tarihi: 25 Ara - 05 Oca

Özel tarih

28 Ara - 02 Oca

2

Genel Duyuru

Admin tarihi: Süresiz

Admin tarihi

3

Happy Hour

Admin tarihi: Süresiz

Sıralamayı değiştirmek için sürükle-bırak yapın. Tarih/durum düzenlemek için kalem ikonuna tıklayın.

Spot Düzenleme (Kurum Override)

Yılbaşı Kampanyası

0:45 • Admin tarihi: 25 Ara - 05 Oca

Bu ayarlar sadece sizin kurumunuzu etkiler. Diğer kurumlar Admin tarihlerini kullanmaya devam eder.

Şube Sidebar Widget

Aktif

Spotlar

3 şarkı sonra

Açık

Durdurulmuş

Spotlar

Durduruldu

Durdu

Player

Spot Çalarken Player Görünümü

Normal Şarkı

Hayal Kahvesi

Sezen Aksu

Spot Çalarken

SPOT

Yılbaşı Kampanyası

0:27

Atla butonu: Kullanıcı isterse spotu atlayabilir. Atlama "was_skipped=true" olarak loglanır.

İstatistik Sayfaları

Admin İstatistikleri

2,456

Toplam Çalınma

18%

Atlama Oranı

Kurum Bazlı

Başkan Holding 524
ABC Restoranlar 412

Kurumsal İstatistikler

524

Toplam

187

Bu Hafta

Şube Bazlı

Merkez 215
Ankara 156

API Endpoints

Admin

GET /api/admin/corporate-spots
POST /api/admin/corporate-spots
PUT /api/admin/corporate-spots/{id}
DELETE /api/admin/corporate-spots/{id}
POST /api/admin/corporate-spots/reorder
GET /api/admin/corporate-spots/stats

Corporate

GET /api/corporate/spot-settings
PUT /api/corporate/spot-settings
GET /api/corporate/spots ← Kurum spotları + schedule
PUT /api/corporate/spots/{id}/schedule ← Override
POST /api/corporate/spots/reorder
GET /api/corporate/spot-stats

Player

GET /api/spot/init
GET /api/spot/next
POST /api/spot/played
POST /api/spot/pause
POST /api/spot/resume

Geliştirme Sırası

1 Veritabanı

4 migration + 2 model + ilişkiler

2 Admin Panel

CRUD + tarih + sıralama + istatistik

3 Kurumsal Panel

Ayarlar + override + sıralama + istatistik

4 Şube Widget

Sidebar + durdur/devam

5 Player

JS logic + UI + skip button

6 Test & Deploy

Migration + test + build