jikan-rest/app/Features/ItemLookupHandler.php
2023-05-21 11:18:02 +01:00

42 lines
1.3 KiB
PHP

<?php
namespace App\Features;
use App\Contracts\CachedScraperService;
use App\Dto\LookupDataCommand;
use App\Contracts\RequestHandler;
use App\Support\CachedData;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Http\Resources\Json\ResourceCollection;
use Illuminate\Http\Response;
use Illuminate\Support\Collection;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/**
* @template TRequest of LookupDataCommand<TResponse>
* @template TResponse of ResourceCollection|JsonResource|Response
* @implements RequestHandler<TRequest, TResponse>
*/
abstract class ItemLookupHandler implements RequestHandler
{
public function __construct(protected readonly CachedScraperService $scraperService)
{
}
/**
* @param TRequest|LookupDataCommand<TResponse> $request
* @return TResponse
* @throws NotFoundHttpException
*/
public function handle($request)
{
$requestFingerprint = $request->getFingerPrint();
$results = $this->scraperService->find($request->id, $requestFingerprint);
$resource = $this->resource($results);
return $resource->response()->addJikanCacheFlags($requestFingerprint, $results);
}
protected abstract function resource(CachedData $results): JsonResource;
}