From 8bc42f3a9b8ae6a1a4c7d6b03693aceb2937ae8e Mon Sep 17 00:00:00 2001 From: F4ilji Date: Thu, 2 Jul 2026 00:29:38 +0500 Subject: [PATCH] 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 --- .../CreateEducationalProgramAction.php | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/app/Containers/Dashboard/Actions/EducationalPrograms/CreateEducationalProgramAction.php b/app/Containers/Dashboard/Actions/EducationalPrograms/CreateEducationalProgramAction.php index 8dfa3f8..81d6f57 100644 --- a/app/Containers/Dashboard/Actions/EducationalPrograms/CreateEducationalProgramAction.php +++ b/app/Containers/Dashboard/Actions/EducationalPrograms/CreateEducationalProgramAction.php @@ -3,11 +3,44 @@ 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; + } }