This commit is contained in:
F4ilji
2026-04-07 17:54:26 +05:00
parent 04adba6682
commit 936b1fb5b0
468 changed files with 43498 additions and 4176 deletions
@@ -0,0 +1,13 @@
<?php
namespace App\Containers\Dashboard\Actions\AdditionalEducations\Categories;
use App\Containers\AdditionalEducation\Models\AdditionalEducationCategory;
class CreateCategoryAction
{
public function run(array $data): AdditionalEducationCategory
{
return AdditionalEducationCategory::create($data);
}
}
@@ -0,0 +1,13 @@
<?php
namespace App\Containers\Dashboard\Actions\AdditionalEducations\Categories;
use App\Containers\AdditionalEducation\Models\AdditionalEducationCategory;
class DeleteCategoryAction
{
public function run(AdditionalEducationCategory $category): bool
{
return $category->delete();
}
}
@@ -0,0 +1,40 @@
<?php
namespace App\Containers\Dashboard\Actions\AdditionalEducations\Categories;
use App\Containers\AdditionalEducation\Models\AdditionalEducationCategory;
use App\Containers\AdditionalEducation\Models\DirectionAdditionalEducation;
class ListCategoriesAction
{
public function run(array $filters = []): array
{
$query = AdditionalEducationCategory::with(['direction']);
// Фильтр по направлению
if (!empty($filters['direction_id'])) {
$query->where('dir_addit_educat_id', $filters['direction_id']);
}
// Фильтр по активности
if (isset($filters['is_active']) && $filters['is_active'] !== '') {
$query->where('is_active', filter_var($filters['is_active'], FILTER_VALIDATE_BOOLEAN));
}
// Поиск по названию
if (!empty($filters['search'])) {
$search = $filters['search'];
$query->where('title', 'like', '%' . $search . '%');
}
$categories = $query->orderBy('title')->paginate(20)->withQueryString();
return [
'categories' => $categories,
'filters' => $filters,
'directions' => DirectionAdditionalEducation::where('is_active', true)
->orderBy('title')
->get(['id', 'title']),
];
}
}
@@ -0,0 +1,14 @@
<?php
namespace App\Containers\Dashboard\Actions\AdditionalEducations\Categories;
use App\Containers\AdditionalEducation\Models\AdditionalEducationCategory;
class UpdateCategoryAction
{
public function run(AdditionalEducationCategory $category, array $data): AdditionalEducationCategory
{
$category->update($data);
return $category;
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Containers\Dashboard\Actions\AdditionalEducations;
use App\Containers\AdditionalEducation\Models\AdditionalEducation;
use App\Containers\Dashboard\Tasks\AdditionalEducations\GenerateSearchDataTask;
class CreateAdditionalEducationAction
{
public function __construct(
private readonly GenerateSearchDataTask $generateSearchDataTask,
) {}
public function run(array $data): AdditionalEducation
{
$data['search_data'] = $this->generateSearchDataTask->run($data['content'] ?? []);
return AdditionalEducation::create($data);
}
}
@@ -0,0 +1,13 @@
<?php
namespace App\Containers\Dashboard\Actions\AdditionalEducations;
use App\Containers\AdditionalEducation\Models\AdditionalEducation;
class DeleteAdditionalEducationAction
{
public function run(AdditionalEducation $education): bool
{
return $education->delete();
}
}
@@ -0,0 +1,13 @@
<?php
namespace App\Containers\Dashboard\Actions\AdditionalEducations\Directions;
use App\Containers\AdditionalEducation\Models\DirectionAdditionalEducation;
class CreateDirectionAction
{
public function run(array $data): DirectionAdditionalEducation
{
return DirectionAdditionalEducation::create($data);
}
}
@@ -0,0 +1,13 @@
<?php
namespace App\Containers\Dashboard\Actions\AdditionalEducations\Directions;
use App\Containers\AdditionalEducation\Models\DirectionAdditionalEducation;
class DeleteDirectionAction
{
public function run(DirectionAdditionalEducation $direction): bool
{
return $direction->delete();
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Containers\Dashboard\Actions\AdditionalEducations\Directions;
use App\Containers\AdditionalEducation\Models\DirectionAdditionalEducation;
class ListDirectionsAction
{
public function run(array $filters = []): array
{
$query = DirectionAdditionalEducation::query();
// Фильтр по активности
if (isset($filters['is_active']) && $filters['is_active'] !== '') {
$query->where('is_active', filter_var($filters['is_active'], FILTER_VALIDATE_BOOLEAN));
}
// Поиск по названию
if (!empty($filters['search'])) {
$search = $filters['search'];
$query->where('title', 'like', '%' . $search . '%');
}
$directions = $query->orderBy('title')->paginate(20)->withQueryString();
return [
'directions' => $directions,
'filters' => $filters,
];
}
}
@@ -0,0 +1,14 @@
<?php
namespace App\Containers\Dashboard\Actions\AdditionalEducations\Directions;
use App\Containers\AdditionalEducation\Models\DirectionAdditionalEducation;
class UpdateDirectionAction
{
public function run(DirectionAdditionalEducation $direction, array $data): DirectionAdditionalEducation
{
$direction->update($data);
return $direction;
}
}
@@ -0,0 +1,55 @@
<?php
namespace App\Containers\Dashboard\Actions\AdditionalEducations;
use App\Containers\AdditionalEducation\Models\AdditionalEducation;
use App\Containers\AdditionalEducation\Models\AdditionalEducationCategory;
use App\Ship\Enums\Education\FormEducation;
class ListAdditionalEducationsAction
{
public function run(array $filters = []): array
{
$query = AdditionalEducation::with(['category']);
// Фильтр по категории
if (!empty($filters['category_id'])) {
$query->where('category_id', $filters['category_id']);
}
// Фильтр по форме обучения
if (!empty($filters['form_education'])) {
$query->where('form_education', $filters['form_education']);
}
// Фильтр по активности
if (isset($filters['is_active']) && $filters['is_active'] !== '') {
$query->where('is_active', filter_var($filters['is_active'], FILTER_VALIDATE_BOOLEAN));
}
// Поиск по названию или целевой аудитории
if (!empty($filters['search'])) {
$search = $filters['search'];
$query->where(function ($q) use ($search) {
$q->where('title', 'like', '%' . $search . '%')
->orWhere('target_group', 'like', '%' . $search . '%');
});
}
$educations = $query->orderBy('title')->paginate(20)->withQueryString();
return [
'educations' => $educations,
'filters' => $filters,
'categories' => AdditionalEducationCategory::where('is_active', true)
->orderBy('title')
->get(['id', 'title']),
'educationForms' => array_map(fn($form) => [
'value' => $form->value,
'label' => $form->getLabel(),
'color' => $form->getColor(),
'name' => $form->name,
], FormEducation::cases()),
];
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Containers\Dashboard\Actions\AdditionalEducations;
use App\Containers\AdditionalEducation\Models\AdditionalEducation;
use App\Containers\Dashboard\Tasks\AdditionalEducations\GenerateSearchDataTask;
class UpdateAdditionalEducationAction
{
public function __construct(
private readonly GenerateSearchDataTask $generateSearchDataTask,
) {}
public function run(AdditionalEducation $education, array $data): AdditionalEducation
{
if (isset($data['content'])) {
$data['search_data'] = $this->generateSearchDataTask->run($data['content']);
}
$education->update($data);
return $education;
}
}