Files
ntspi-app/app/Containers/Dashboard/Actions/EducationalPrograms/CreateEducationalProgramAction.php
T
F4ilji 8bc42f3a9b 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
2026-07-02 00:29:38 +05:00

47 lines
1.3 KiB
PHP

<?php
namespace App\Containers\Dashboard\Actions\EducationalPrograms;
use App\Containers\Education\Models\EducationalProgram;
use App\Ship\Enums\Education\LevelEducational;
use Illuminate\Support\Str;
class CreateEducationalProgramAction
{
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);
}
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;
}
}