Skip to content
Snippets Groups Projects
Commit a0a2dda6 authored by Александр Плохих's avatar Александр Плохих :waxing_gibbous_moon:
Browse files

STA-960 | refactor abstract factory pattern

parent a78e29e9
No related branches found
No related tags found
1 merge request!16Sta 960
......@@ -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();
......
......@@ -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);
}
}
<?php
namespace App\Controller;
use App\Request\DetailRequest;
use App\Service\NewsDetailService;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Attribute\Route;
#[Route('/api/v1/news')]
class NewsDetailController extends AbstractController
{
public function __construct(NewsDetailService $service)
{
parent::__construct($service);
}
#[Route('/{detailId}', name: 'oneNews')]
public function index(DetailRequest $request): JsonResponse
{
return $this->build($request);
}
}
<?php
namespace App\Controller;
use App\Request\EmptyRequest;
use App\Service\NewsMainNewsService;
use App\Service\ServiceInterface;
use Symfony\Component\Routing\Attribute\Route;
#[Route('/api/v1/news')]
class NewsMainNewsController extends AbstractController
{
public function __construct(NewsMainNewsService $service)
{
parent::__construct($service);
}
#[Route('/mainNews', name: 'mainNews')]
public function index (EmptyRequest $request)
{
return $this->build($request);
}
}
\ No newline at end of file
<?php
namespace App\Controller;
use App\Request\EmptyRequest;
use App\Service\NewsSearchService;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Attribute\Route;
#[Route('/api/v1/news')]
class NewsSearchController extends AbstractController
{
public function __construct(NewsSearchService $service)
{
parent::__construct($service);
}
#[Route('/search', name: 'newsSearch')]
public function index(EmptyRequest $request): JsonResponse
{
return $this->build($request);
}
}
\ No newline at end of file
<?php
namespace App\Controller;
use App\Request\DetailRequest;
use App\Service\RestaurantDetailService;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Attribute\Route;
#[Route('/api/v1/restaurants/')]
class RestaurantDetailController extends AbstractController
{
public function __construct(RestaurantDetailService $service)
{
parent::__construct($service);
}
#[Route('{detailId}', name: 'restaurant')]
public function index(DetailRequest $request): JsonResponse
{
return $this->build($request);
}
}
......@@ -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);
}
}
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment