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