TEKNİK ANALİZ 6 Ocak 2026

Sektör Bazlı Kategori Sistemi

Mevcut Durum Analizi ve Uygulama Gereksinimleri

Sistem Durumu Özeti

MEVCUT
Temel altyapı hazır
Model, Migration, Controller, Route
EKSİK
Filtre sistemi yok
Tag, Filter, User-Sector ilişkisi
YAPILACAK
7 adım gerekli
Migration, Model, Seeder, Frontend

Basit Anlatım (Herkes İçin)

Şu anda ne var?
Sistemde "Sektör" (Sector) yapısı mevcut. Örneğin: Cafe, Restaurant, Gym, SPA gibi sektörler var. Her sektörün kendi playlist'leri ve radyoları var. Yani temel yapı hazır, çalışıyor.

Çalışan Özellikler:

  • Sektörler listelenebiliyor (/sectors sayfası)
  • Her sektörün detay sayfası var (/sectors/cafe)
  • Sektörlere playlist ve radyo atanabiliyor
  • Admin panelinde yönetilebiliyor

Ne eksik?
Spotify Business'taki gibi filtreler yok. Örneğin Cafe sektöründe "Acoustic", "Bossa Nova", "Chill", "Upbeat" gibi seçenekler yok. Ayrıca kullanıcı profili ile sektör bağlantısı yok (kullanıcı hangi sektörde çalışıyor bilgisi).

Eksik Özellikler:

  • Filtre sistemi (Acoustic, Chill, Upbeat vb.)
  • Tag sistemi (playlist'leri etiketleme)
  • Kullanıcı-Sektör bağlantısı
  • Spotify-style scrollable frontend

Ne yapacağız?
Sisteme filtre ve tag yapısı ekleyeceğiz. Kullanıcı profili ile sektör bağlantısı kuracağız. Frontend'i Spotify Business gibi yapacağız (scroll yaparak tüm içerik görünecek). Toplam 7 adımda tamamlanacak.

Beklenen Sonuç:

Kullanıcı Cafe sektörü seçtiğinde, üstte "Discover", "All", "Acoustic", "Bossa Nova" gibi filtreler görünecek. Tıkladığında o tag'e sahip playlist'ler grid halinde (kutu kutu) listelenecek. Scroll yaparak tüm içerik görülebilecek, sayfa geçişi olmayacak.

Teknik Detaylar: Mevcut Altyapı

1. Database Tabloları (Mevcut)

muzibu_sectors
sector_id (PK)
title (JSON - çoklu dil)
slug (JSON - çoklu dil)
description (JSON)
media_id (icon/cover)
is_active (boolean)
Migration: 2025_11_09_000005_create_muzibu_sectors_table.php
muzibu_playlistables
id (PK)
playlist_id (FK → playlists)
playlistable_type (sector/radio/genre/corporate)
playlistable_id (polymorphic ID)
position (sıralama)
Migration: 2025_12_30_211700_create_playlistables_table.php
muzibu_genres
genre_id (PK)
title (JSON - çoklu dil)
slug (JSON)
media_id (icon)
is_active (boolean)
Genre'ler playlistables üzerinden playlist'lere bağlanır
users (Tenant DB)
id (PK)
name, email, phone (user info)
primary_sector_id ❌ EKSİK!
Her tenant'ın kendi users tablosu var! Field tenant DB'ye eklenecek.

2. Laravel Model'ler (Mevcut)

Modules\Muzibu\App\Models\Sector ✓ MEVCUT
Traits: HasTranslations, HasMediaManagement, HasPlaylistDistribution, HasFavorites, Searchable
İlişkiler: playlists() (polymorphic via playlistables), radios() (many-to-many)
Dosya: Modules/Muzibu/app/Models/Sector.php
Modules\Muzibu\App\Models\Genre ✓ MEVCUT
Traits: HasTranslations, HasMediaManagement, HasPlaylistDistribution, Searchable
İlişkiler: songs() (hasMany), playlists() (polymorphic via playlistables)
Dosya: Modules/Muzibu/app/Models/Genre.php
Modules\Muzibu\App\Models\Playlist ✓ MEVCUT
İlişkiler: sectors(), genres(), radios(), corporates() (hepsi morphedByMany)
Method: getAllDistributions() - Tüm ilişkileri tek sorguda getirir
Dosya: Modules/Muzibu/app/Models/Playlist.php

3. Controller'lar (Mevcut)

Frontend Controller
SectorController (Front)
index() - Liste
show($slug) - Detay
apiIndex() - SPA API
apiShow($slug) - SPA Detail
Modules/Muzibu/app/Http/Controllers/Front/SectorController.php
API Controller
SectorController (API)
index() - JSON liste
playlists($id) - Sektör playlist'leri
songs($id) - Sektör şarkıları
Modules/Muzibu/app/Http/Controllers/Api/SectorController.php
Admin Controller
Admin Livewire
• sector-component.blade.php
• sector-manage-component.blade.php
Modules/Muzibu/resources/views/admin/livewire/

4. Route'lar (Mevcut)

✓ Frontend Routes (web.php)
GET /sectors → SectorController@index
GET /sectors/{slug} → SectorController@show
✓ API Routes (api.php)
GET /api/sectors → SectorController@index
GET /api/sectors/{id}/playlists
GET /api/sectors/{id}/songs

5. Frontend View'lar (Mevcut)

resources/views/themes/muzibu/sectors/index.blade.php
resources/views/themes/muzibu/sectors/show.blade.php
Basit liste görünümü mevcut. Spotify-style scrollable grid tasarımı YAPILACAK.

Eksik Olan Yapılar

1. Filtre/Tag Sistemi

Spotify Business'taki gibi "Acoustic", "Bossa Nova", "Chill", "Upbeat" gibi filtreler yok. Playlist'leri etiketlemek için tag sistemi kurulmalı.

Gerekli Yapı:
  • • Tablo: muzibu_tags (id, name, slug, type, is_active)
  • • Pivot: muzibu_playlist_tag (playlist_id, tag_id)
  • • Model: Tag.php (HasTranslations trait ile)
  • • İlişki: Playlist::tags() (belongsToMany)

2. Kullanıcı-Sektör Bağlantısı

Kullanıcı profilinde "primary_sector_id" field'ı yok. Kullanıcının hangi sektörde çalıştığı bilgisi saklanmalı.

Gerekli Değişiklik:
  • • Migration: add_primary_sector_to_users
  • • Field: primary_sector_id (nullable, foreign key)
  • • İlişki: User::primarySector() (belongsTo)

3. Filtre API Endpoint'leri

Sektör + tag kombinasyonuyla playlist getiren API endpoint'i yok.

Gerekli Endpoint'ler:
  • GET /api/sectors/{id}/tags → Sektörün tag'lerini listele
  • GET /api/sectors/{id}/playlists?tag={tagSlug} → Filtrelenmiş playlist'ler

4. Spotify-Style Frontend Tasarım

Mevcut tasarım basit liste görünümü. Spotify Business gibi scrollable grid layout gerekli.

Yapılacak Değişiklikler:
  • • Üstte sektör seçici butonlar (Cafe, Restaurant, Gym...)
  • • Hero section (sektör adı + cover)
  • • Filter butonlar (Discover, All, Acoustic, Bossa Nova...)
  • • Grid layout (6 kolon, responsive)
  • • Playlist kartları (cover + başlık + açıklama)
  • • Scroll ile tüm içerik görünsün (sayfa geçişi yok)

Yapılacaklar (Adım Adım)

1

Tag Sistemi Migration Oluştur

Playlist'leri etiketlemek için tag tablosu ve pivot tablo oluştur.

Migration 1: create_muzibu_tags_table.php
id (bigint, PK)
name (JSON - çoklu dil)
slug (JSON - çoklu dil)
type (string - mood/style/tempo/genre)
color (string - hex code, nullable)
icon (string - FA icon class, nullable)
is_active (boolean)
timestamps
Migration 2: create_muzibu_playlist_tag_table.php
id (bigint, PK)
playlist_id (FK → muzibu_playlists)
tag_id (FK → muzibu_tags)
timestamps
• UNIQUE constraint (playlist_id, tag_id)
Her iki migration da MODÜL İÇİNDE iki yerde oluştur (central + tenant)!
2

Tag Model Oluştur

Laravel model oluştur, çoklu dil ve ilişkiler ekle.

Dosya: Modules/Muzibu/app/Models/Tag.php
• Traits: HasTranslations, Sluggable, SoftDeletes
• Primary Key: tag_id
• Translatable: ['name', 'slug']
• Relationship: playlists() (belongsToMany → Playlist)
• Scopes: active(), ofType($type)
3

Playlist Model'e Tag İlişkisi Ekle

Playlist model'e tags() ilişkisi ekle.

Modules/Muzibu/app/Models/Playlist.php
• Method ekle: tags()
return $this->belongsToMany(Tag::class, 'muzibu_playlist_tag', 'playlist_id', 'tag_id');
• Eager loading için: protected $with = ['tags']; (opsiyonel)
4

User Model'e Sector Field Ekle

Kullanıcı profiline primary_sector_id field'ı ekle.

Migration: add_primary_sector_to_users.php (Tenant DB)
$table->unsignedBigInteger('primary_sector_id')->nullable();
$table->foreign('primary_sector_id')->references('sector_id')->on('muzibu_sectors');
⚠️ Migration SADECE tenant klasöründe oluştur! (database/migrations/tenant/)
app/Models/User.php
protected $fillable → 'primary_sector_id' ekle
• Method ekle: primarySector() (belongsTo → Sector, tenant connection)
5

Seeder Oluştur (Tag ve Sector Verileri)

Demo veriler için seeder oluştur.

Modules/Muzibu/database/seeders/TagSeeder.php
  • Cafe: Acoustic, Bossa Nova, Chill, Jazz, Lo-Fi, Upbeat
  • Restaurant: Classical, Dinner, Elegant, Romantic, Soft Jazz
  • Gym: Energetic, HIIT, Motivational, Power, Workout
  • SPA: Ambient, Calm, Meditation, Relaxation, Zen
Her tag çoklu dil desteğiyle oluşturulacak (tr, en)
6

API Endpoint'leri Ekle

Tag filtreleme için API method'ları ekle.

SectorController (API) - Yeni Method'lar:
tags($sectorId) → Sektörün tüm tag'lerini getir
playlistsByTag($sectorId, $tagSlug) → Tag'e göre filtrelenmiş playlist'ler
Route'lar (api.php):
GET /api/sectors/{id}/tags
GET /api/sectors/{id}/playlists?tag={slug}
7

Frontend Tasarım (Spotify-Style)

Mevcut view'ları Spotify Business gibi scrollable grid'e çevir.

sectors/show.blade.php - Yeni Yapı:
  • Üstte: Sektör seçici butonlar (horizontal scroll)
  • Hero section: Sektör adı + cover + açıklama
  • Filter butonlar: "Discover", "All" + tag'ler (horizontal)
  • Grid layout: 6 kolon (xl), 4 kolon (lg), 3 kolon (md), 2 kolon (sm)
  • Playlist kartları: Cover + başlık + açıklama (hover efekti)
  • Alpine.js ile tag filtreleme (sayfa yenileme yok)
  • Smooth scroll, lazy loading (görseller için)
Referans: public/readme/2026/01/06/kategori-sistemi-sektor-bazli/v3/index.html

Özet ve Sonuç

Sistemin Mevcut Durumu:

  • Sector altyapısı tamamen mevcut - Model, migration, controller, route, view hepsi var ve çalışıyor.
  • Polymorphic ilişki sistemi kurulu - playlistables tablosu sector, genre, radio ilişkilerini yönetiyor.
  • API endpoint'leri hazır - Frontend ve mobile için JSON API mevcut.

Eksik Olan ve Yapılacaklar:

  • Tag sistemi kurulacak - Playlist'leri "Acoustic", "Chill" gibi etiketlerle işaretlemek için.
  • User-Sector bağlantısı eklenecek - Kullanıcı hangi sektörde çalışıyor bilgisi.
  • Frontend Spotify-style olacak - Scrollable grid layout, filter butonları, smooth UX.

İş Planı:

1 Tag migration + model oluştur
2 Playlist-Tag ilişkisi kur
3 User'a primary_sector_id ekle
4 Seeder'larla demo veriler oluştur
5 API endpoint'leri ekle (tag filtreleme)
6 Frontend tasarımı Spotify-style yap
7 Test ve cache temizleme

Sonuç:

Temel altyapı %80 hazır. Sadece tag sistemi, user-sector bağlantısı ve frontend tasarımı eklenecek. 7 adımda sistem tamamen Spotify Business tarzında çalışır hale gelecek.