refactor ClientAcademicJournalController; replace caching logic with action classes for academic journal retrieval and improve code clarity
This commit is contained in:
@@ -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,
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user