From f0f17647474928cc047545e6bd921cb8df597604 Mon Sep 17 00:00:00 2001 From: AmirmahdiNourkazemi Date: Tue, 9 Jun 2026 18:53:23 +0330 Subject: [PATCH] fix: slug name --- .../Controllers/MusicPlaylistController.php | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/MusicPlaylistController.php b/app/Http/Controllers/MusicPlaylistController.php index 74138d4..570e515 100644 --- a/app/Http/Controllers/MusicPlaylistController.php +++ b/app/Http/Controllers/MusicPlaylistController.php @@ -59,7 +59,7 @@ public function store(Request $request) ], 422); } - $data['slug'] = Str::slug($data['name']); + $data['slug'] = $this->uniqueSlug($data['name']); // An uploaded image file takes precedence over a provided image_id. $data['image_id'] = $this->uploadedImageId($request) ?? ($data['image_id'] ?? null); @@ -138,7 +138,7 @@ public function update(Request $request, $id) ]); if (isset($data['name'])) { - $data['slug'] = Str::slug($data['name']); + $data['slug'] = $this->uniqueSlug($data['name'], $playlist->id); } // An uploaded image file takes precedence over a provided image_id. @@ -165,11 +165,34 @@ public function update(Request $request, $id) ]); } + // Build a slug that is unique within music_playlists. Persian names often + // transliterate to the same/empty value, so we fall back and add a counter. + private function uniqueSlug(string $name, ?int $ignoreId = null): string + { + $base = Str::slug($name); + if ($base === '') { + $base = 'playlist'; + } + + $slug = $base; + $i = 2; + while ( + MusicPlaylist::where('slug', $slug) + ->when($ignoreId, fn ($q) => $q->where('id', '!=', $ignoreId)) + ->exists() + ) { + $slug = "{$base}-{$i}"; + $i++; + } + + return $slug; + } + public function destroy($id) { $playlist = MusicPlaylist::findOrFail($id); $playlist->delete(); - + return response()->json(['message' => 'Playlist deleted successfully']); } }