From 950e310096b0155e53d3cbb2dd9de1bb9a4c2f16 Mon Sep 17 00:00:00 2001 From: Kacper Donat <kadet1090@gmail.com> Date: Sun, 16 Feb 2020 21:59:38 +0100 Subject: [PATCH] Move trip and operator repository to fluent pattern --- src/Controller/Api/v1/TripController.php | 3 +- .../Database/GenericOperatorRepository.php | 37 +++++++------------ .../Database/GenericTripRepository.php | 29 ++++++--------- src/Provider/OperatorRepository.php | 7 +--- src/Provider/TripRepository.php | 3 +- 5 files changed, 30 insertions(+), 49 deletions(-) diff --git a/src/Controller/Api/v1/TripController.php b/src/Controller/Api/v1/TripController.php index 87b87cd..031f39a 100644 --- a/src/Controller/Api/v1/TripController.php +++ b/src/Controller/Api/v1/TripController.php @@ -4,6 +4,7 @@ namespace App\Controller\Api\v1; use App\Controller\Controller; use App\Model\Trip; +use App\Modifier\IdFilter; use App\Provider\TripRepository; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; @@ -18,7 +19,7 @@ class TripController extends Controller */ public function one($id, TripRepository $repository) { - $trip = $repository->getById($id); + $trip = $repository->all(new IdFilter($id)); return $this->json($trip, Response::HTTP_OK, [], $this->serializerContextFactory->create(Trip::class)); } diff --git a/src/Provider/Database/GenericOperatorRepository.php b/src/Provider/Database/GenericOperatorRepository.php index 929d994..2af85f7 100644 --- a/src/Provider/Database/GenericOperatorRepository.php +++ b/src/Provider/Database/GenericOperatorRepository.php @@ -2,37 +2,26 @@ namespace App\Provider\Database; +use App\Entity\OperatorEntity; use App\Model\Operator; +use App\Modifier\Modifier; use App\Provider\OperatorRepository; use Tightenco\Collect\Support\Collection; class GenericOperatorRepository extends DatabaseRepository implements OperatorRepository { - public function getAll(): Collection + public function all(Modifier ...$modifiers): Collection { - $repository = $this->em->getRepository(Operator::class); - $operators = $repository->findAll(); + $builder = $this->em + ->createQueryBuilder() + ->from(OperatorEntity::class, 'operator') + ->select('operator') + ; - return collect($operators); - } - - public function getById($id): ?Operator - { - $repository = $this->em->getRepository(Operator::class); - - return $repository->find($id); - } - - public function getManyById($ids): Collection - { - $repository = $this->em->getRepository(Operator::class); - $operators = $repository->findBy(['id' => $ids]); - - return collect($operators); - } - - protected static function getHandlers() - { - return []; + return $this->allFromQueryBuilder($builder, $modifiers, [ + 'alias' => 'operator', + 'entity' => OperatorEntity::class, + 'type' => Operator::class, + ]); } } diff --git a/src/Provider/Database/GenericTripRepository.php b/src/Provider/Database/GenericTripRepository.php index 3944e18..00626ad 100644 --- a/src/Provider/Database/GenericTripRepository.php +++ b/src/Provider/Database/GenericTripRepository.php @@ -4,30 +4,25 @@ namespace App\Provider\Database; use App\Entity\TripEntity; use App\Model\Trip; +use App\Modifier\Modifier; use App\Provider\TripRepository; +use Tightenco\Collect\Support\Collection; class GenericTripRepository extends DatabaseRepository implements TripRepository { - public function getById(string $id): Trip + public function all(Modifier ...$modifiers): Collection { - $id = $this->id->generate($this->provider, $id); - - $trip = $this->em + $builder = $this->em ->createQueryBuilder() - ->from(TripEntity::class, 't') - ->join('t.stops', 'ts') + ->from(TripEntity::class, 'trip') + ->join('trip.stops', 'ts') ->join('ts.stop', 's') - ->select('t', 'ts') - ->where('t.id = :id') - ->getQuery() - ->setParameter('id', $id) - ->getOneOrNullResult(); + ->select('t', 'ts'); - return $this->convert($trip); - } - - protected static function getHandlers() - { - return []; + return $this->allFromQueryBuilder($builder, $modifiers, [ + 'alias' => 'operator', + 'entity' => TripEntity::class, + 'type' => Trip::class, + ]); } } diff --git a/src/Provider/OperatorRepository.php b/src/Provider/OperatorRepository.php index 79f8b20..70d88c7 100644 --- a/src/Provider/OperatorRepository.php +++ b/src/Provider/OperatorRepository.php @@ -7,9 +7,6 @@ namespace App\Provider; use App\Model\Operator; use Tightenco\Collect\Support\Collection; -interface OperatorRepository +interface OperatorRepository extends FluentRepository { - public function getAll(): Collection; - public function getById($id): ?Operator; - public function getManyById($ids): Collection; -} \ No newline at end of file +} diff --git a/src/Provider/TripRepository.php b/src/Provider/TripRepository.php index 4a82521..17459d8 100644 --- a/src/Provider/TripRepository.php +++ b/src/Provider/TripRepository.php @@ -4,7 +4,6 @@ namespace App\Provider; use App\Model\Trip; -interface TripRepository +interface TripRepository extends FluentRepository { - public function getById(string $id): Trip; }