Files
SkinbaseNova/app/Uploads/Services/SlugService.php
2026-02-14 15:14:12 +01:00

38 lines
755 B
PHP

<?php
declare(strict_types=1);
namespace App\Uploads\Services;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
final class SlugService
{
public function makeSlug(string $title): string
{
$base = Str::slug($title);
if ($base === '') {
$base = 'artwork';
}
$candidate = $base;
$suffix = 2;
while ($this->publishedSlugExists($candidate)) {
$candidate = $base . '-' . $suffix;
$suffix++;
}
return $candidate;
}
private function publishedSlugExists(string $slug): bool
{
return DB::table('uploads')
->where('status', 'published')
->where('slug', $slug)
->exists();
}
}