for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace App\Filters\Movie;
use App\Filters\Filter;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\HttpFoundation\ParameterBag;
/**
* /api/movies?yf=2000&yt=2010 => Will display all movies with release date between 2000-2010
*/
class YearRange implements Filter
{
public function handle(ParameterBag $params, QueryBuilder $qb): QueryBuilder
$yearFrom = (int)$params->get('yf');
$yearTo = (int)$params->get('yt');
$year = (int)$params->get('y');
if ($yearFrom > $yearTo) {
return $qb;
}
if ($yearFrom && $yearFrom === $yearTo) {
$year = $yearFrom;
if ($this->isValid($year)) {
return $qb
->andWhere("DATE_PART('year', m.releaseDate) = :filter_year")
->setParameter('filter_year', $year);
if ($this->isValid($yearFrom)) {
$qb
->andWhere("DATE_PART('year', m.releaseDate) >= :filter_year_from")
->setParameter('filter_year_from', $yearFrom);
if ($this->isValid($yearTo)) {
->andWhere("DATE_PART('year', m.releaseDate) <= :filter_year_to")
->setParameter('filter_year_to', $yearTo);
private function isValid(int $year): bool
return !($year < 1878 || $year > 2050);