feat: add UUID, slug generation and defaults to educational program creation

- Auto-generate UUID and unique slug (with education level suffix)
- Set default values for inner_code, learning_forms, direction_study_id
- Slug avoids duplicates by appending numeric suffix
This commit is contained in:
F4ilji
2026-07-02 00:29:38 +05:00
parent 6750ca8f45
commit 8bc42f3a9b
@@ -3,11 +3,44 @@
namespace App\Containers\Dashboard\Actions\EducationalPrograms; namespace App\Containers\Dashboard\Actions\EducationalPrograms;
use App\Containers\Education\Models\EducationalProgram; use App\Containers\Education\Models\EducationalProgram;
use App\Ship\Enums\Education\LevelEducational;
use Illuminate\Support\Str;
class CreateEducationalProgramAction class CreateEducationalProgramAction
{ {
public function run(array $data): EducationalProgram public function run(array $data): EducationalProgram
{ {
$data['uuid'] = Str::uuid()->toString();
$data['slug'] = $this->generateUniqueSlug($data['name'], $data['lvl_edu'] ?? null);
$data['inner_code'] = $data['inner_code'] ?? '';
$data['learning_forms'] = $data['learning_forms'] ?? [];
if (empty($data['direction_study_id'])) {
$data['direction_study_id'] = null;
}
return EducationalProgram::create($data); return EducationalProgram::create($data);
} }
private function generateUniqueSlug(string $name, mixed $lvlEdu): string
{
$slug = Str::slug($name);
if ($lvlEdu) {
$level = LevelEducational::tryFrom($lvlEdu);
if ($level) {
$slug = $slug . '-' . Str::lower($level->name);
}
}
$originalSlug = $slug;
$count = 1;
while (EducationalProgram::where('slug', $slug)->exists()) {
$slug = $originalSlug . '-' . $count;
$count++;
}
return $slug;
}
} }