#35 - Move trip and operator repository to fluent pattern

This commit is contained in:
Kacper Donat 2020-02-16 21:59:38 +01:00
parent d72fcf777f
commit c7dc90bfc5
5 changed files with 30 additions and 49 deletions

View File

@ -4,6 +4,7 @@ namespace App\Controller\Api\v1;
use App\Controller\Controller; use App\Controller\Controller;
use App\Model\Trip; use App\Model\Trip;
use App\Modifier\IdFilter;
use App\Provider\TripRepository; use App\Provider\TripRepository;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Annotation\Route;
@ -18,7 +19,7 @@ class TripController extends Controller
*/ */
public function one($id, TripRepository $repository) 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)); return $this->json($trip, Response::HTTP_OK, [], $this->serializerContextFactory->create(Trip::class));
} }

View File

@ -2,37 +2,26 @@
namespace App\Provider\Database; namespace App\Provider\Database;
use App\Entity\OperatorEntity;
use App\Model\Operator; use App\Model\Operator;
use App\Modifier\Modifier;
use App\Provider\OperatorRepository; use App\Provider\OperatorRepository;
use Tightenco\Collect\Support\Collection; use Tightenco\Collect\Support\Collection;
class GenericOperatorRepository extends DatabaseRepository implements OperatorRepository class GenericOperatorRepository extends DatabaseRepository implements OperatorRepository
{ {
public function getAll(): Collection public function all(Modifier ...$modifiers): Collection
{ {
$repository = $this->em->getRepository(Operator::class); $builder = $this->em
$operators = $repository->findAll(); ->createQueryBuilder()
->from(OperatorEntity::class, 'operator')
->select('operator')
;
return collect($operators); return $this->allFromQueryBuilder($builder, $modifiers, [
} 'alias' => 'operator',
'entity' => OperatorEntity::class,
public function getById($id): ?Operator 'type' => Operator::class,
{ ]);
$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 [];
} }
} }

View File

@ -4,30 +4,25 @@ namespace App\Provider\Database;
use App\Entity\TripEntity; use App\Entity\TripEntity;
use App\Model\Trip; use App\Model\Trip;
use App\Modifier\Modifier;
use App\Provider\TripRepository; use App\Provider\TripRepository;
use Tightenco\Collect\Support\Collection;
class GenericTripRepository extends DatabaseRepository implements TripRepository 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); $builder = $this->em
$trip = $this->em
->createQueryBuilder() ->createQueryBuilder()
->from(TripEntity::class, 't') ->from(TripEntity::class, 'trip')
->join('t.stops', 'ts') ->join('trip.stops', 'ts')
->join('ts.stop', 's') ->join('ts.stop', 's')
->select('t', 'ts') ->select('t', 'ts');
->where('t.id = :id')
->getQuery()
->setParameter('id', $id)
->getOneOrNullResult();
return $this->convert($trip); return $this->allFromQueryBuilder($builder, $modifiers, [
} 'alias' => 'operator',
'entity' => TripEntity::class,
protected static function getHandlers() 'type' => Trip::class,
{ ]);
return [];
} }
} }

View File

@ -7,9 +7,6 @@ namespace App\Provider;
use App\Model\Operator; use App\Model\Operator;
use Tightenco\Collect\Support\Collection; 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;
} }

View File

@ -4,7 +4,6 @@ namespace App\Provider;
use App\Model\Trip; use App\Model\Trip;
interface TripRepository interface TripRepository extends FluentRepository
{ {
public function getById(string $id): Trip;
} }