namespace App\Http\Controller\Pet;
use apivalk\apivalk\Http\Controller\AbstractApivalkController;
use apivalk\apivalk\Http\Request\ApivalkRequestInterface;
use apivalk\apivalk\Http\Response\AbstractApivalkResponse;
use apivalk\apivalk\Router\Route;
use apivalk\apivalk\Http\Method\GetMethod;
use App\Http\Request\Pet\GetPetRequest;
use App\Http\Response\Pet\GetPetResponse;
use App\Http\Response\Common\NotFoundResponse;
class GetPetController extends AbstractApivalkController
{
public static function getRoute(): Route
{
return new Route('/pet/{id}', new GetMethod());
}
public static function getRequestClass(): string
{
return GetPetRequest::class;
}
public static function getResponseClasses(): array
{
return [
GetPetResponse::class,
NotFoundResponse::class,
];
}
public function __invoke(ApivalkRequestInterface $request): AbstractApivalkResponse
{
// $request is already populated and validated!
$id = $request->path()->id;
$pet = $this->petRepository->find($id);
if (!$pet) {
return new NotFoundResponse('Pet not found');
}
return new GetPetResponse($pet);
}
}