Commit a0a2dda6 authored by Александр Плохих's avatar Александр Плохих 🌔
Browse files

STA-960 | refactor abstract factory pattern

parent a78e29e9
Loading
Loading
Loading
Loading
+4 −10
Original line number Diff line number Diff line
@@ -2,21 +2,15 @@

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));
+33 −7
Original line number Diff line number Diff line
@@ -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);
    }
}
+0 −23
Original line number Diff line number Diff line
<?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);
    }
}
+0 −23
Original line number Diff line number Diff line
<?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
+0 −23
Original line number Diff line number Diff line
<?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
Loading