v6 Degisiklikler (v5'ten Farklar)
v5 (Karmasik)
spots tablosu: Admin tarihleri + siralamasi
schedules tablosu: Corporate override
COALESCE(schedule.date, spot.date)
Override mantigi karisik
v6 (Basit)
spots tablosu: SADECE dosya bilgisi
spot_corporates: Corporate'in TUM ayarlari
Override YOK - Corporate karar verir
Silme YOK - Arsivleme VAR
Temel Mantik
Admin spot yukler (dosya) → Corporate'lara atar → Her Corporate kendi tarih/sira/aktiflik ayarini yapar → Istemezse arsivler (silmez)
Tum Kararlar (Final)
Skip serbest, zorlama yok.
Tarih, sira, aktiflik = Corporate.
Silmek yok, arsivle.
Performans oncelikli.
Dosya boyutu limiti.
Admin ne yuklerse o.
30 sn dinlenince 1 sarki sayilir.
Corporate → Sube
Veritabani Yapisi (Basitlestirilmis)
YENi: muzibu_corporate_spots (Admin'in yukladigi spotlar - SADECE dosya bilgisi)
| Kolon | Tip | Aciklama |
|---|---|---|
| id | BIGINT PK | Auto increment |
| title | VARCHAR(255) | Spot basligi |
| audio_path | VARCHAR(500) | Dosya yolu |
| duration | INT | Saniye |
| file_size | INT | Bytes |
| is_active | BOOLEAN DEFAULT TRUE | Admin genel kontrol (false = tamamen kapali) |
| timestamps | TIMESTAMP | created_at, updated_at |
Basit: Tarih yok, siralama yok. Sadece dosya + Admin genel acik/kapali.
YENi: muzibu_corporate_spot_corporates (Corporate'in TUM ayarlari)
| Kolon | Tip | Aciklama |
|---|---|---|
| id | BIGINT PK | Auto increment |
| spot_id | BIGINT FK | Hangi spot |
| corporate_account_id | BIGINT FK | Hangi kurum (ana sube) |
| starts_at | TIMESTAMP NULL | Baslangic tarihi (NULL = her zaman) |
| ends_at | TIMESTAMP NULL | Bitis tarihi (NULL = suresiz) |
| position | INT DEFAULT 0 | Siralama (kucuk = once) |
| is_enabled | BOOLEAN DEFAULT TRUE | Aktif mi? |
| is_archived | BOOLEAN DEFAULT FALSE | Arsivlendi mi? (silmek yerine) |
| timestamps | TIMESTAMP | created_at, updated_at |
INDEX (corporate_account_id, is_enabled, is_archived)
YENi: muzibu_corporate_spot_plays (Calinma loglari)
| Kolon | Tip | Aciklama |
|---|---|---|
| id | BIGINT PK | |
| spot_id | BIGINT FK | Hangi spot |
| corporate_account_id | BIGINT FK | Hangi sube |
| user_id | BIGINT FK NULL | Kim dinledi |
| was_skipped | BOOLEAN DEFAULT FALSE | Atlandi mi? |
| played_at | TIMESTAMP | Ne zaman |
GUNCELLEME: muzibu_corporate_accounts (4 kolon ekleme)
spot_enabled BOOLEAN DEFAULT TRUE -- Ana sube: Sistem acik mi?
spot_songs_between INT DEFAULT 10 -- Ana sube: Kac sarkida bir?
spot_current_index INT DEFAULT 0 -- Rotation index
spot_is_paused BOOLEAN DEFAULT FALSE -- Her sube: Durduruldu mu?
Veritabani Ozeti
3
Yeni Tablo
+4
Kolon
Basit
Yapi
Arsiv
Silme yok
Sistem Akisi
Spot Yukleme → Calma Akisi
Admin Spot Yukler
Ses dosyasi + baslik → spots tablosu
Admin Corporate'lara Atar
Hangi kurumlar bu spotu gorecek? → spot_corporates kayit olusur
Corporate Ayarlarini Yapar
Tarih, siralama, aktif/pasif → spot_corporates gunceller
Sube Durdurabilir
Her sube kendi icin durdur/devam → spot_is_paused
Player Calar
10 sarkida bir spot calar → spot_plays loglama
Spot Calmasi Icin Tum Kosullar
-- Spot calabilir mi?
SELECT spot.*, sc.*
FROM muzibu_corporate_spots spot
JOIN muzibu_corporate_spot_corporates sc ON spot.id = sc.spot_id
WHERE spot.is_active = TRUE -- Admin aktif
AND sc.corporate_account_id = :corporate_id -- Bu kurum
AND sc.is_enabled = TRUE -- Corporate aktif
AND sc.is_archived = FALSE -- Arsivlenmemis
AND corporate.spot_enabled = TRUE -- Kurum sistemi acik
AND branch.spot_is_paused = FALSE -- Sube durdurulmamis
AND (sc.starts_at IS NULL OR sc.starts_at <= NOW())
AND (sc.ends_at IS NULL OR sc.ends_at >= NOW())
ORDER BY sc.position ASC
Kontrol Matrisi
| Admin (spot) | Corporate (spot_corporates) | Tarih (spot_corporates) | Sube (accounts) | Sonuc |
|---|---|---|---|---|
| is_active = FALSE | - | - | - | CALMAZ |
| TRUE | is_enabled = FALSE | - | - | CALMAZ |
| TRUE | TRUE | Gecmemis/Gecmis | - | CALMAZ |
| TRUE | TRUE | Tarih OK | spot_is_paused = TRUE | CALMAZ |
| TRUE | TRUE | Tarih OK | FALSE | CALAR |
Admin Panel
Spot Listesi
Corporate Spots
| Spot | Sure | Atama | Durum | Islem |
|---|---|---|---|---|
|
Yilbasi Kampanyasi 1.2 MB |
0:45 | 12 kurum | Aktif | |
|
Eski Kampanya 0.8 MB |
0:30 | 5 kurum | Pasif |
Kurumlara Atama
Yilbasi Kampanyasi
0:45 • 1.2 MB
Hangi kurumlara atansin?
Kurumsal Panel (Ana Sube)
Spot Yonetimi (Ana Sube)
Kurumsal Spot Ayarlari
Spotlari kurum icin ozellestirin
Spot Sistemi
Tum subelerde
Bize Atanan Spotlar
Yilbasi Kampanyasi
0:45
25 Ara - 05 Oca
Genel Duyuru
0:30
Suresiz
Happy Hour
0:20
Arsivlenmis Spotlar (1)
Eski Kampanya
0:35 • Arsivlendi
Siralamyi degistirmek icin surukle-birak yapin. Istemediginiz spotlari arsivleyin.
Spot Ayarlari
Yilbasi Kampanyasi
0:45
Bos = Her zaman
Bos = Suresiz
Sube Sidebar Widget
Aktif
Spotlar
3 sarki sonra
Durdurulmus
Spotlar
Durduruldu
Player
Spot Calarken Player Gorunumu
Normal Sarki
Hayal Kahvesi
Sezen Aksu
Spot Calarken
Yilbasi Kampanyasi
Atla butonu: Kullanici isterse spotu atlayabilir. Atlama "was_skipped=true" olarak loglanir.
localStorage Sayac Mantigi
// Sarki 30 sn dinlenince
localStorage.setItem('spot_song_count', count + 1);
// 10 sarkiya ulasinca
if (count >= 10) {
playNextSpot();
localStorage.setItem('spot_song_count', 0);
}
// Sayac tarayici bazli, performans oncelikli
API Endpoints
Admin
Corporate
Sube
Player
Gelistirme Sirasi
3 migration + 2 model + iliskiler
CRUD + atama + istatistik
Ayarlar + tarih + siralama + arsiv + istatistik
Sidebar + durdur/devam
JS logic + UI + skip button
Migration + test + build