KRİTİK HATA BULUNDU

Code Review: Context Menu Overhaul

Detaylı Backend & Frontend Analizi

25 Aralık 2025

KRİTİK HATA: API Endpoint Eksik!

❌ Problem:

JavaScript kodu /api/muzibu/playlists/{id}/add-album endpoint'ine istek atıyor, ancak bu endpoint backend'de TANIMLI DEĞİL!

Frontend (muzibu-store.js:1032)

async addAlbumToPlaylists() {
    const promises = this.selectedPlaylists.map(playlistId =>
        fetch(`/api/muzibu/playlists/${playlistId}/add-album`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]')?.content || ''
            },
            body: JSON.stringify({ album_id: this.contentId })
        }).then(res => res.json())
    );
    ...
}

Backend Routes (api.php)

Route::middleware(['web', 'auth'])->group(function () {
    Route::post('/{id}/add-song', [PlaylistController::class, 'addSong']);
    // ❌ add-album route YOK!
    Route::delete('/{id}/remove-song/{songId}', ...);
    ...
});

Sonuç:

  • Albüme sağ tıklayıp "Playliste Ekle" yapılırsa → 404 Not Found
  • Kullanıcı albüm ekleyemez → Kötü UX
  • Console'da hata gösterir

Çözüm Önerisi

1️⃣ Route Ekle (api.php:48)

Route::post('/{id}/add-song', [PlaylistController::class, 'addSong'])->name('api.muzibu.playlists.add-song');
Route::post('/{id}/add-album', [PlaylistController::class, 'addAlbum'])->name('api.muzibu.playlists.add-album');

2️⃣ Controller Metodu Ekle (PlaylistController.php)

/**
 * Add all songs from album to playlist
 */
public function addAlbum(Request $request, int $id): JsonResponse
{
    try {
        $request->validate([
            'album_id' => 'required|integer|exists:muzibu_albums,album_id',
        ]);

        $userId = auth()->id();
        $albumId = $request->input('album_id');

        // Get album with songs
        $album = Album::with('songs')->findOrFail($albumId);
        $songIds = $album->songs->where('is_active', 1)->pluck('song_id')->toArray();

        if (empty($songIds)) {
            return response()->json([
                'success' => false,
                'message' => 'Albümde aktif şarkı bulunamadı',
            ], 400);
        }

        // Add all songs to playlist (using existing service)
        $addedCount = 0;
        foreach ($songIds as $songId) {
            $result = $this->playlistService->addSongToPlaylist($id, $songId, $userId);
            if ($result['success']) {
                $addedCount++;
            }
        }

        return response()->json([
            'success' => true,
            'added_count' => $addedCount,
            'total_songs' => count($songIds),
            'message' => "{$addedCount} şarkı playliste eklendi",
        ]);

    } catch (\Exception $e) {
        \Log::error('Add album to playlist error:', ['message' => $e->getMessage()]);
        return response()->json([
            'success' => false,
            'message' => 'Albüm ekleme başarısız',
        ], 500);
    }
}

Diğer Bulgular (Sorun Yok)

✅ Mevcut API Endpoint'leri

Endpoint Durum Dosya
/api/muzibu/playlists/my-playlists ✓ VAR api.php:44
/api/muzibu/songs/{id}/playlists ✓ VAR api.php:82
/api/muzibu/playlists/{id}/add-song ✓ VAR api.php:47
/api/muzibu/playlists/{id}/add-album ✗ YOK -

✅ Alpine.js playlistModal Store

  • showForSong() - Doğru çalışır
  • showForAlbum() - Mantık doğru, sadece backend eksik
  • fetchPlaylists() - API doğru
  • checkExistingPlaylists() - API doğru
  • addSongToPlaylists() - API doğru, çalışır
  • addAlbumToPlaylists() - Backend eksik, 404 verir!

✅ Context Menu Data Integrity

  • artist_id, artist_slug: Başarıyla kaldırılmış
  • cover_url: Tüm componentlere eklenmiş (getCoverUrl(300, 300))
  • album_id, album_slug: Korunmuş (gerekli)
  • is_favorite: Doğru kontrol ediliyor

✅ Menu Item Değişiklikleri

Song Menu

  • goToArtist kaldırıldı
  • addToPlaylist var
  • Albüme Git korundu

Album Menu

  • goToArtist kaldırıldı
  • addToPlaylist eklendi
  • Backend eksik!

Radio Menu

  • addToQueue kaldırıldı
  • Sadece play + favorite

✅ Action Handler'lar

  • song-actions.js: goToArtist kaldırıldı, addToPlaylist doğru
  • album-actions.js: goToArtist kaldırıldı, addToPlaylist eklendi
  • radio-actions.js: addToQueue kaldırıldı
  • Tüm handler'lar playlistModal.showForSong/Album kullanıyor

Özet

❌ Kritik Sorunlar (1)

  • /api/muzibu/playlists/{id}/add-album endpoint'i YOK

✅ Başarılı İşlemler (12)

  • playlistModal store eksiksiz
  • Context menu data temiz
  • Menu yapısı doğru
  • Action handler'lar çalışıyor
  • API endpoint'lerin çoğu var

Yapılması Gerekenler