fix: slug name

This commit is contained in:
2026-06-09 18:53:23 +03:30
parent bf3aa7bb82
commit f0f1764747
@@ -59,7 +59,7 @@ public function store(Request $request)
], 422); ], 422);
} }
$data['slug'] = Str::slug($data['name']); $data['slug'] = $this->uniqueSlug($data['name']);
// An uploaded image file takes precedence over a provided image_id. // An uploaded image file takes precedence over a provided image_id.
$data['image_id'] = $this->uploadedImageId($request) ?? ($data['image_id'] ?? null); $data['image_id'] = $this->uploadedImageId($request) ?? ($data['image_id'] ?? null);
@@ -138,7 +138,7 @@ public function update(Request $request, $id)
]); ]);
if (isset($data['name'])) { 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. // 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) public function destroy($id)
{ {
$playlist = MusicPlaylist::findOrFail($id); $playlist = MusicPlaylist::findOrFail($id);
$playlist->delete(); $playlist->delete();
return response()->json(['message' => 'Playlist deleted successfully']); return response()->json(['message' => 'Playlist deleted successfully']);
} }
} }