From a0a2dda6c69f1bc9dd46c92212a4d9c1ec8857f7 Mon Sep 17 00:00:00 2001 From: AlexP Date: Sun, 12 May 2024 23:16:47 +0500 Subject: [PATCH] STA-960 | refactor abstract factory pattern --- .../{AbstractController.php => Handle.php} | 14 ++----- app/src/Controller/NewsController.php | 40 +++++++++++++++---- app/src/Controller/NewsDetailController.php | 23 ----------- app/src/Controller/NewsMainNewsController.php | 23 ----------- app/src/Controller/NewsSearchController.php | 23 ----------- .../Controller/RestaurantDetailController.php | 23 ----------- app/src/Controller/RestaurantsController.php | 24 +++++++---- app/src/Request/EmptyRequest.php | 2 + 8 files changed, 55 insertions(+), 117 deletions(-) rename app/src/Controller/{AbstractController.php => Handle.php} (59%) delete mode 100644 app/src/Controller/NewsDetailController.php delete mode 100644 app/src/Controller/NewsMainNewsController.php delete mode 100644 app/src/Controller/NewsSearchController.php delete mode 100644 app/src/Controller/RestaurantDetailController.php diff --git a/app/src/Controller/AbstractController.php b/app/src/Controller/Handle.php similarity index 59% rename from app/src/Controller/AbstractController.php rename to app/src/Controller/Handle.php index 61d805e..97f6715 100644 --- a/app/src/Controller/AbstractController.php +++ b/app/src/Controller/Handle.php @@ -2,24 +2,18 @@ namespace App\Controller; -use App\Dto\ErrorDto; -use App\Error\AbstractError; use App\Request\AbstractRequest; use App\Service\ServiceInterface; use Symfony\Component\HttpFoundation\JsonResponse; -use Throwable; -use Symfony\Bundle\FrameworkBundle\Controller\AbstractController as BundleController; -abstract class AbstractController extends BundleController +class Handle { - public function __construct( - private readonly ServiceInterface $service - ) {} + public function __construct(private readonly ServiceInterface $service) {} - protected function build(AbstractRequest $request): JsonResponse + public function handle(AbstractRequest $request): JsonResponse { // try { - return new JsonResponse($this->service->serve($request)); + return new JsonResponse($this->service->serve($request)); // // } catch (AbstractError $error) { // $errorDto = new ErrorDto(); diff --git a/app/src/Controller/NewsController.php b/app/src/Controller/NewsController.php index b321457..90c6a8c 100644 --- a/app/src/Controller/NewsController.php +++ b/app/src/Controller/NewsController.php @@ -2,22 +2,48 @@ namespace App\Controller; +use App\Request\DetailRequest; +use App\Request\EmptyRequest; use App\Request\NewsListingRequest; +use App\Service\NewsDetailService; use App\Service\NewsListingService; +use App\Service\NewsMainNewsService; +use App\Service\NewsSearchService; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController as BundleController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Routing\Attribute\Route; -#[Route('api/v1/news')] -class NewsController extends AbstractController +#[Route('/api/v1/news')] +class NewsController extends BundleController { - public function __construct(NewsListingService $service) + public function __construct( + private readonly NewsDetailService $detailService, + private readonly NewsListingService $listingService, + private readonly NewsMainNewsService $mainNewsService, + private readonly NewsSearchService $searchService, + ) {} + + #[Route('/', name: 'news', methods: ['GET'])] + public function news(NewsListingRequest $request): JsonResponse + { + return (new Handle($this->listingService))->handle($request); + } + + #[Route('/mainNews', name: 'mainNews', methods: ['GET'])] + public function mainNews(EmptyRequest $request): JsonResponse + { + return (new Handle($this->mainNewsService))->handle($request); + } + + #[Route('/search', name: 'searchNews', methods: ['GET'])] + public function search(EmptyRequest $request): JsonResponse { - parent::__construct($service); + return (new Handle($this->searchService))->handle($request); } - #[Route('/', name: 'news')] - public function index(NewsListingRequest $request): JsonResponse + #[Route('/{detailId}', name: 'oneNews', methods: ['GET'])] + public function oneNews(DetailRequest $request): JsonResponse { - return $this->build($request); + return (new Handle($this->detailService))->handle($request); } } diff --git a/app/src/Controller/NewsDetailController.php b/app/src/Controller/NewsDetailController.php deleted file mode 100644 index e236d8c..0000000 --- a/app/src/Controller/NewsDetailController.php +++ /dev/null @@ -1,23 +0,0 @@ -build($request); - } -} diff --git a/app/src/Controller/NewsMainNewsController.php b/app/src/Controller/NewsMainNewsController.php deleted file mode 100644 index 2595dfe..0000000 --- a/app/src/Controller/NewsMainNewsController.php +++ /dev/null @@ -1,23 +0,0 @@ -build($request); - } -} \ No newline at end of file diff --git a/app/src/Controller/NewsSearchController.php b/app/src/Controller/NewsSearchController.php deleted file mode 100644 index a6b0fa6..0000000 --- a/app/src/Controller/NewsSearchController.php +++ /dev/null @@ -1,23 +0,0 @@ -build($request); - } -} \ No newline at end of file diff --git a/app/src/Controller/RestaurantDetailController.php b/app/src/Controller/RestaurantDetailController.php deleted file mode 100644 index 8b547ae..0000000 --- a/app/src/Controller/RestaurantDetailController.php +++ /dev/null @@ -1,23 +0,0 @@ -build($request); - } -} diff --git a/app/src/Controller/RestaurantsController.php b/app/src/Controller/RestaurantsController.php index 3be1890..b268f83 100644 --- a/app/src/Controller/RestaurantsController.php +++ b/app/src/Controller/RestaurantsController.php @@ -2,23 +2,31 @@ namespace App\Controller; +use App\Request\DetailRequest; use App\Request\RestaurantListingRequest; +use App\Service\RestaurantDetailService; use App\Service\RestaurantListingService; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController as BundleController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Routing\Attribute\Route; -#[Route('/api/v1/restaurants/')] -class RestaurantsController extends AbstractController +#[Route('/api/v1/restaurants')] +class RestaurantsController extends BundleController { - public function __construct(RestaurantListingService $service) + public function __construct( + private readonly RestaurantListingService $listingService, + private readonly RestaurantDetailService $detailService, + ) {} + + #[Route('/', name: 'restaurants', methods: ['GET'])] + public function restaurants(RestaurantListingRequest $request): JsonResponse { - parent::__construct($service); + return (new Handle($this->listingService))->handle($request); } - /** Листинг ресторанов */ - #[Route(name: 'restaurants')] - public function index(RestaurantListingRequest $request): JsonResponse + #[Route('/{detailId}', name: 'restaurant', methods: ['GET'])] + public function restaurant(DetailRequest $request): JsonResponse { - return $this->build($request); + return (new Handle($this->detailService))->handle($request); } } diff --git a/app/src/Request/EmptyRequest.php b/app/src/Request/EmptyRequest.php index 9ea7ad0..28809e1 100644 --- a/app/src/Request/EmptyRequest.php +++ b/app/src/Request/EmptyRequest.php @@ -5,4 +5,6 @@ namespace App\Request; class EmptyRequest extends AbstractRequest { protected const AUTO_VALIDATE = false; + + protected function populate(): void {} } \ No newline at end of file -- GitLab