v3 26 Şubat 2026

Dinamik İçerik Sistemi — Basit Özet

Ne yapıyoruz, tablolarda ne var, admin'de ne yapılıyor, sitede ne görünüyor.

Ne Yapıyoruz?

Muzibu orta alanını (main) saate, sektöre ve gösterildiği sayfaya (anasayfa, sektör, radyo, genre vb.) göre değişen bir sisteme çeviriyoruz.

Admin panelden "Koleksiyon" denen gruplar oluşturulacak. Her koleksiyonun içine Playlist, Albüm, Radyo, Genre veya Sektör eklenebilecek.

Örnek: "Sabah Kafe Mix" koleksiyonu → sadece 06:00-12:00 arası, sadece anasayfada, sadece Kafe sektörüne, yatay kaydırma tasarımıyla gösterilir.

Kullanıcı sayfayı açık bıraksa bile her saat başı içerik otomatik güncellenir, müzik kesilmez.

Neye Dokunuyoruz, Neye Dokunmuyoruz?
Değişecek
Anasayfa + Sektör sayfaları ORTA ALAN (main). Şu an orada: Türler grid, Playlist'ler, Albümler, Radyolar, Sektörler → hepsi kalkacak, yerine koleksiyonlar gelecek.
Dokunulmayacak
Left sidebar, right sidebar, header, player bar, footer — hepsi aynen kalacak. Sadece ortadaki main alan değişiyor.

Her Koleksiyonun 4 Sorusu

Admin bir koleksiyon oluştururken şu 4 şeyi ayarlar:

NEREDE?
Hangi sayfalarda görünsün?
Kolon: show_on
Seçenekler: Anasayfa, Sektör, Radyo, Genre... Birden fazla seçilebilir. İleride yeni sayfalar eklenebilir.
NE ZAMAN?
Hangi saatlerde görünsün?
Kolon: display_rules
06:00-12:00 arası, veya "Her zaman". Gün seçimi de var.
KİME?
Kim görecek?
Kolonlar: sector_rules + corporate_account_id
Herkes: İkisi de boş → tüm kullanıcılar görür.
Sektöre göre: Sadece Kafe sektöründekiler görür.
Corporate'a özel: Sadece o firmanın çalışanları görür.
NASIL?
Hangi tasarımla görünsün?
Kolon: template
Grid (tür kartları gibi) veya Yatay kaydırma (playlist kartları gibi). İleride yenileri eklenebilir.

"Kime?" Detayı

Herkes zaten üye olduğu için abonelik filtresi yok. İki filtre var:

Herkese
sector_rules = boş veya show_to_all
corporate_account_id = NULL
Tüm kullanıcılar bu koleksiyonu görür.
Sektöre Göre
sector_rules = {sector_ids: [1,3]}
corporate_account_id = NULL
Örn: Kafe sektöründeki kullanıcılar anasayfalarında bunu görür. Diğerleri görmez.
Corporate'a Özel
sector_rules = boş
corporate_account_id = 5
Örn: X Otel Zinciri çalışanları anasayfalarında bunu görür. Diğer hiç kimse görmez.
corporate_account_id: Basit bir FK. NULL = herkesin koleksiyonu, dolu = o corporate'a özel. Her corporate aynı "alanı" kullanır — sıralama sort_order ile belirlenir, diğer koleksiyonlarla karışır. 1-2 corporate kullanacak.

Tasarım Seçenekleri

Admin her koleksiyon için tasarım seçer. Şu an 2 tasarım var, ileride yenileri eklenebilir:

grid — Grid Görünüm
Şu an anasayfadaki "Türler" bölümü gibi. Renkli kutucuklar, yan yana.
┌───────┬───────┬───────┬───────┐
│ PopRockJazzR&B   │
├───────┼───────┼───────┼───────┤
│ MetalTürküCazDance │
└───────┴───────┴───────┴───────┘
horizontal-scroll — Yatay Kaydırma
Şu an anasayfadaki Playlist/Albüm/Radyo bölümleri gibi. Kartlar, yatay kaydırma.
Başlık               Tümü ›
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐  →
│     │ │     │ │     │ │     │
│ img │ │ img │ │ img │ │ img │
│     │ │     │ │     │ │     │
└─────┘ └─────┘ └─────┘ └─────┘
  Ad      Ad      Ad      Ad

İleride yeni tasarımlar (banner, carousel, mini liste vb.) kolayca eklenebilir — DB'de VARCHAR olarak saklanıyor.

Tablo 1: muzibu_content_collections

Her satır bir koleksiyon. Admin panelden oluşturulur.

KolonTipNe İşe YararÖrnek
collection_idBIGINT PKOtomatik numara1, 2, 3
titleJSONKoleksiyon adı (çoklu dil){"tr": "Sabah Kafe Mix"}
slugJSONURL kısa ismi{"tr": "sabah-kafe-mix"}
descriptionJSON NULLAçıklama (opsiyonel){"tr": "Sabah için..."}
show_on JSON NEREDE: Hangi sayfalarda görünsün? ["homepage", "sector", "radio", "genre"]
template VARCHAR NASIL: Hangi tasarımla? grid, horizontal-scroll
display_rules JSON NULL NE ZAMAN: Saat + gün kuralı {"start_hour":6, "end_hour":12, "is_always":false}
sector_rules JSON NULL KİME (sektör): Hangi sektörlere? {"show_to_all":true} veya {"mode":"include", "sector_ids":[1]}
corporate_account_id FK NULL KİME (firma): NULL = herkes, dolu = o firmaya özel NULL veya 5
iconVARCHAR NULLBaşlık ikonufas fa-coffee
colorVARCHAR NULLRenk kodu#f59e0b
media_idFK NULLKapak görseli42
sort_orderINTSıralama (küçük = üstte)1, 2, 3
is_activeBOOLEANAçık / Kapalı1
Toplam: 13 kolon. v1'deki 15 kolondan 5 kaldırıldı (type, is_featured, cache_ttl, business_rules, priority), 3 eklendi (show_on, template, corporate_account_id).

Tablo 2: muzibu_collection_items

Her satır, bir koleksiyona eklenmiş bir öğe. Radyo + Playlist + Albüm karışık eklenebilir.

KolonTipNe İşe YararÖrnek
idBIGINT PKOtomatik numara1, 2, 3
collection_idFKHangi koleksiyona ait1
itemable_typeVARCHARÖğe türü (5 seçenek)playlist, album, radio, genre, sector
itemable_idBIGINTÖğenin ID'si12
sort_orderINTSıralama (sürükle-bırak)1, 2, 3
is_activeBOOLEANAktif mi?1
Örnek: "Sabah Kafe Mix" koleksiyonu (id=1)
collection_id=1, type=radio, id=5 (Jazz FM), sort_order=1
collection_id=1, type=playlist, id=12 (Sabah Akustik), sort_order=2
collection_id=1, type=playlist, id=45 (Kahve Molası), sort_order=3
collection_id=1, type=album, id=8 (Cafe Classics), sort_order=4

Ek: users Tablosuna Eklenen Kolon

KolonTipNe İşe YararÖrnek
sector_idFK NULLKullanıcının sektörü. Kafe sahibi = Kafe koleksiyonlarını görür.1

Admin Panelde Ne Yapılacak?

1
Koleksiyon Oluştur
İsim ver, ikon ve renk seç. Kapak görseli ekle (opsiyonel).
2
Nerede Görünsün?
Anasayfa, Sektör, Radyo, Genre... Birden fazla seçilebilir.
3
Tasarım Seç
Grid veya Yatay kaydırma.
4
Saat Ayarla
Başlangıç-bitiş saati (00:00-23:00) veya "Her zaman".
5
Kime Gösterilsin?
Herkese → hiçbir şey seçme
Sektöre göre → sektör seç (Kafe, Spor Salonu...)
Firmaya özel → corporate hesap seç (X Otel Zinciri)
6
İçerik Ekle
Playlist, Albüm, Radyo, Genre veya Sektör ekle. Sürükle-bırak ile sırala.
7
Koleksiyonları Sırala
Koleksiyonlar arası sıralama: sort_order (sürükle-bırak, küçük numara üstte).

Sitede Ne Olacak?

1
Kişisel Karşılama
"Günaydın, Ahmet!" + "Kafe & Restoran için seçilmiş içerikler"
2
Koleksiyonlar Listelenir
O saatte + o sektöre + o sayfaya uygun koleksiyonlar, admin'in seçtiği tasarımda (grid/yatay) sırayla görünür.
3
Tıklama
Radyo → hemen çalar (sayfa değişmez)   Playlist/Albüm → şarkı listesi   Genre/Sektör → ilgili sayfa
4
"Tümü" Butonu
7+ öğe → "Tümü" görünür → grid sayfa açılır. 6 ve altı → buton gizli.
5
Her Saat Başı Otomatik Güncelleme
Sayfa yenilenmez, müzik kesilmez. Sadece orta alan sessizce güncellenir.
Versiyon Geçmişi
v1: İlk özet. type ENUM (curated/daypart/sector/featured), priority, is_featured, cache_ttl, business_rules.
v2: type kaldırıldı → show_on + template eklendi. priority → sort_order. is_featured + cache_ttl kaldırıldı. Tasarım seçenekleri (grid + yatay kaydırma).
v3: business_rules kaldırıldı (herkes zaten üye). corporate_account_id FK eklendi (firmaya özel koleksiyon). "Kime?" bölümü sadeleşti: herkese, sektöre göre, firmaya özel.

Teknik detaylar, kod örnekleri ve tüm kararlar için:

Tam Dokümantasyon (v10)

Not: v10 henüz v3 değişikliklerini içermiyor, güncellenecek.