AI Dokümantasyonu

Playlistables Veri Taşıma Kılavuzu

Gerçek veri geldiğinde AI'ın kullanacağı rehber

30 Aralık 2025

Sistem Özeti

Yeni Tablo

muzibu_playlistables

Eski Tablolar

muzibu_playlist_sector
muzibu_playlist_radio

Tablo Yapısı

Kolon Tip Açıklama
id BIGINT UNSIGNED Primary Key
playlist_id BIGINT UNSIGNED FK → muzibu_playlists(playlist_id)
playlistable_type VARCHAR(50) Morph alias: sector, radio, corporate, mood
playlistable_id BIGINT UNSIGNED İlgili entity'nin ID'si
position INT UNSIGNED Sıralama (varsayılan: 0)
created_at TIMESTAMP Oluşturulma tarihi
updated_at TIMESTAMP Güncellenme tarihi

Morph Map (playlistable_type değerleri)

'sector'
→ Modules\Muzibu\App\Models\Sector
'radio'
→ Modules\Muzibu\App\Models\Radio
'corporate'
→ Modules\Muzibu\App\Models\MuzibuCorporateAccount
'mood'
→ (İleride eklenecek)

Morph map: Modules/Muzibu/Providers/MuzibuServiceProvider.php

Gerçek Veri Taşıma Adımları

1 Mevcut Verileri Kontrol Et

-- Mevcut sector ilişkileri
SELECT COUNT(*) FROM muzibu_playlist_sector;

-- Mevcut radio ilişkileri
SELECT COUNT(*) FROM muzibu_playlist_radio;

-- Yeni tabloda ne var?
SELECT playlistable_type, COUNT(*)
FROM muzibu_playlistables
GROUP BY playlistable_type;

2 Sector Verilerini Taşı

INSERT INTO muzibu_playlistables
    (playlist_id, playlistable_type, playlistable_id, position, created_at, updated_at)
SELECT
    playlist_id,
    'sector' as playlistable_type,
    sector_id as playlistable_id,
    0 as position,
    NOW() as created_at,
    NOW() as updated_at
FROM muzibu_playlist_sector
ON DUPLICATE KEY UPDATE updated_at = NOW();

3 Radio Verilerini Taşı

INSERT INTO muzibu_playlistables
    (playlist_id, playlistable_type, playlistable_id, position, created_at, updated_at)
SELECT
    playlist_id,
    'radio' as playlistable_type,
    radio_id as playlistable_id,
    0 as position,
    NOW() as created_at,
    NOW() as updated_at
FROM muzibu_playlist_radio
ON DUPLICATE KEY UPDATE updated_at = NOW();

4 Corporate Verilerini Ekle (Yeni)

-- Örnek: Playlist 5'i Corporate 2 ve 3'e dağıt
INSERT INTO muzibu_playlistables
    (playlist_id, playlistable_type, playlistable_id, position, created_at, updated_at)
VALUES
    (5, 'corporate', 2, 0, NOW(), NOW()),
    (5, 'corporate', 3, 1, NOW(), NOW());

5 Doğrulama

-- Toplam kontrol
SELECT
    playlistable_type,
    COUNT(*) as count,
    COUNT(DISTINCT playlist_id) as unique_playlists
FROM muzibu_playlistables
GROUP BY playlistable_type;

-- Örnek playlist'in tüm dağıtımları
SELECT * FROM muzibu_playlistables WHERE playlist_id = 5;

Laravel Kullanımı

Playlist Model Metodları

// Tüm dağıtımları getir
$playlist->getAllDistributions();
// Return: ['sectors' => [1,2], 'radios' => [3], 'corporates' => [5,6]]

// Belirli bir entity type'a dağıt
$playlist->distributeToEntity('corporate', 5);
$playlist->distributeToEntity('sector', 3);

// Entity'den kaldır
$playlist->removeFromEntity('corporate', 5);

// Sync (tamamen değiştir)
$playlist->syncDistribution('corporate', [1, 2, 3]);

// Polymorphic relations (Eloquent)
$playlist->distributedToSectors;
$playlist->distributedToRadios;
$playlist->distributedToCorporates;

Entity Model Metodları (Trait)

// Sector, Radio, Corporate modellerinde
use HasPlaylistDistribution;

// Bu entity'e dağıtılmış playlist'ler
$sector->playlists;
$corporate->activePlaylists;
$radio->publicPlaylists;

// Playlist sayısı
$corporate->playlists_count;

// Playlist ekle/çıkar
$corporate->attachPlaylist($playlist);
$corporate->detachPlaylist($playlist);
$corporate->syncPlaylists([1, 2, 3]);

İlgili Dosyalar

Modules/Muzibu/database/migrations/2025_12_30_211700_create_playlistables_table.php
Modules/Muzibu/database/migrations/tenant/2025_12_30_211700_create_playlistables_table.php
Modules/Muzibu/app/Models/Playlist.php (polymorphic relations)
Modules/Muzibu/app/Traits/HasPlaylistDistribution.php
Modules/Muzibu/Providers/MuzibuServiceProvider.php (morph map)

Önemli Notlar