refactor ClientAcademicJournalController; replace caching logic with action classes for academic journal retrieval and improve code clarity

This commit is contained in:
F4ilji
2025-07-19 12:49:10 +05:00
parent 1fc793089c
commit 4558282da8
6 changed files with 162 additions and 56 deletions
@@ -0,0 +1,37 @@
<?php
namespace App\Containers\Science\Actions;
use App\Containers\Science\Tasks\FindAcademicJournalBySlugTask;
use App\Containers\Science\Tasks\GetAcademicJournalIssuesGroupedByYearTask;
use App\Ship\Contracts\SeoServiceInterface;
use App\Ship\Exceptions\NotFoundException;
use Intervention\Image\Exception\NotFoundException as ExceptionNotFoundException;
class GetAcademicJournalAction
{
public function __construct(
private readonly FindAcademicJournalBySlugTask $findAcademicJournalBySlugTask,
private readonly GetAcademicJournalIssuesGroupedByYearTask $getAcademicJournalIssuesGroupedByYearTask,
private readonly SeoServiceInterface $seoService
)
{
}
/**
* @throws NotFoundException
*/
public function run(string $slug): array
{
$journalData = $this->findAcademicJournalBySlugTask->run($slug);
$seo = $this->seoService->getSeoForModel($journalData);
$groupedIssues = $this->getAcademicJournalIssuesGroupedByYearTask->run($journalData->id);
return [
'journalData' => $journalData,
'seo' => $seo,
'groupedIssues' => $groupedIssues,
];
}
}