Skip to content
Snippets Groups Projects
NewsGetDetailUseCase.php 1.02 KiB
Newer Older
<?php

namespace App\News\UseCase;

use App\News\Request\NewsDetailRequest;
use App\News\Service\NewsPrepareResponseService;
use App\Shared\DtoFactory\ErrorDtoFactory;
use App\Shared\Error\NotFoundError;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Throwable;

class NewsGetDetailUseCase
{
    public function __construct(
        private readonly NewsPrepareResponseService $responsePrepareService,
        private readonly ErrorDtoFactory $errorFactory,
    ) {
    }

    public function execute(NewsDetailRequest $request): JsonResponse
    {
        try {
            return new JsonResponse(
                $this->responsePrepareService->bornDetailElement($request)
            );
        } catch (NotFoundError $error) {
            $errorDto = $this->errorFactory->create($error);
            return new JsonResponse($errorDto, $errorDto->status);
        } catch (Throwable) {
            return new JsonResponse([], Response::HTTP_INTERNAL_SERVER_ERROR);
        }
    }
}