diff --git a/app/Containers/InstituteStructure/Actions/FindDivisionBySlugAction.php b/app/Containers/InstituteStructure/Actions/FindDivisionBySlugAction.php new file mode 100644 index 0000000..a95ffe5 --- /dev/null +++ b/app/Containers/InstituteStructure/Actions/FindDivisionBySlugAction.php @@ -0,0 +1,18 @@ +getDivisionBySlugTask->run($slug); + } +} diff --git a/app/Containers/InstituteStructure/Actions/ListDivisionsAction.php b/app/Containers/InstituteStructure/Actions/ListDivisionsAction.php new file mode 100644 index 0000000..977216e --- /dev/null +++ b/app/Containers/InstituteStructure/Actions/ListDivisionsAction.php @@ -0,0 +1,19 @@ +getActiveDivisionsTask->run(); + } +} diff --git a/app/Containers/InstituteStructure/Tasks/GetActiveDivisionsTask.php b/app/Containers/InstituteStructure/Tasks/GetActiveDivisionsTask.php new file mode 100644 index 0000000..b54f120 --- /dev/null +++ b/app/Containers/InstituteStructure/Tasks/GetActiveDivisionsTask.php @@ -0,0 +1,21 @@ +value . 'list', now()->addDay(), function () { + return DivisionResource::collection( + Division::query()->where('is_active', true)->get() + ); + }); + } +} diff --git a/app/Containers/InstituteStructure/Tasks/GetDivisionBySlugTask.php b/app/Containers/InstituteStructure/Tasks/GetDivisionBySlugTask.php new file mode 100644 index 0000000..ad6ecfe --- /dev/null +++ b/app/Containers/InstituteStructure/Tasks/GetDivisionBySlugTask.php @@ -0,0 +1,25 @@ +value . $slug, now()->addDay(), function () use ($slug) { + return Division::query() + ->with([ + 'workers' => fn ($query) => $query->orderBy('sort', 'asc'), + 'workers.userDetail', + 'seo' + ]) + ->where('is_active', true) + ->where('slug', $slug) + ->firstOrFail(); + }); + } +} diff --git a/app/Containers/InstituteStructure/UI/WEB/Controllers/ClientDivisionController.php b/app/Containers/InstituteStructure/UI/WEB/Controllers/ClientDivisionController.php index f3c914a..098aada 100644 --- a/app/Containers/InstituteStructure/UI/WEB/Controllers/ClientDivisionController.php +++ b/app/Containers/InstituteStructure/UI/WEB/Controllers/ClientDivisionController.php @@ -2,52 +2,36 @@ namespace App\Containers\InstituteStructure\UI\WEB\Controllers; -use App\Containers\InstituteStructure\Models\Division; +use App\Containers\InstituteStructure\Actions\FindDivisionBySlugAction; +use App\Containers\InstituteStructure\Actions\ListDivisionsAction; use App\Containers\InstituteStructure\UI\WEB\Transformers\DivisionResource; use App\Ship\Contracts\SeoServiceInterface; use App\Ship\Controllers\Controller; -use App\Ship\Enums\CacheKeys; -use Illuminate\Support\Facades\Cache; use Inertia\Inertia; class ClientDivisionController extends Controller { - public function __construct(readonly SeoServiceInterface $seoPageProvider){} + public function __construct( + readonly SeoServiceInterface $seoPageProvider, + private readonly ListDivisionsAction $listDivisionsAction, + private readonly FindDivisionBySlugAction $findDivisionBySlugAction + ) { + } - public function index() + public function index(): \Inertia\Response { - $divisions = Cache::remember(CacheKeys::DIVISIONS_PREFIX->value . 'list', now()->addDay(), function () { - return DivisionResource::collection( - Division::query()->where('is_active', true)->get() - ); - }); + $divisions = $this->listDivisionsAction->run(); - $seo = Cache::remember(CacheKeys::DIVISIONS_PREFIX->value . 'seo', now()->addDay(), function () { - return $this->seoPageProvider->getSeoForCurrentPage(); - }); + $seo = $this->seoPageProvider->getSeoForCurrentPage(); return Inertia::render('Client/Divisions/Index', compact('divisions', 'seo')); } public function show(string $slug): \Inertia\Response { - $divisions = Cache::remember(CacheKeys::DIVISIONS_PREFIX->value . 'list', now()->addDay(), function () { - return DivisionResource::collection( - Division::query()->where('is_active', true)->get() - ); - }); + $divisions = $this->listDivisionsAction->run(); - $divisionData = Cache::remember(CacheKeys::DIVISION_PREFIX->value . $slug, now()->addDay(), function () use ($slug) { - return Division::query() - ->with([ - 'workers' => fn ($query) => $query->orderBy('sort', 'asc'), - 'workers.userDetail', - 'seo' - ]) - ->where('is_active', true) - ->where('slug', $slug) - ->firstOrFail(); - }); + $divisionData = $this->findDivisionBySlugAction->run($slug); $seo = $this->seoPageProvider->getSeoForModel($divisionData); @@ -55,5 +39,4 @@ class ClientDivisionController extends Controller return Inertia::render('Client/Divisions/Show', compact('divisions', 'division', 'seo')); } - }