fix: slug name
This commit is contained in:
@@ -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']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user