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:
+33
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user