YearRange::isValid()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
c 0
b 0
f 0
ccs 2
cts 2
cp 1
rs 10
cc 2
nc 2
nop 1
crap 2
1
<?php
2
3
namespace App\Filters\Movie;
4
5
use App\Filters\Filter;
6
use Doctrine\ORM\QueryBuilder;
7
use Symfony\Component\HttpFoundation\ParameterBag;
8
9
/**
10
 * /api/movies?yf=2000&yt=2010 => Will display all movies with release date between 2000-2010.
11
 */
12
class YearRange implements Filter
13
{
14 34
    public function handle(ParameterBag $params, QueryBuilder $qb): QueryBuilder
15
    {
16 34
        $yearFrom = (int) $params->get('yf');
17 34
        $yearTo = (int) $params->get('yt');
18 34
        $year = (int) $params->get('y');
19
20 34
        if ($yearTo && $yearFrom > $yearTo) {
21
            return $qb;
22
        }
23
24 34
        if ($yearFrom && $yearFrom === $yearTo) {
25
            $year = $yearFrom;
26
        }
27
28 34
        if ($this->isValid($year)) {
29
            return $qb
30 1
                ->andWhere("DATE_PART('year', m.releaseDate) = :filter_year")
31 1
                ->setParameter('filter_year', $year);
32
        }
33
34 33
        if ($this->isValid($yearFrom)) {
35
            $qb
36 4
                ->andWhere("DATE_PART('year', m.releaseDate) >= :filter_year_from")
37 4
                ->setParameter('filter_year_from', $yearFrom);
38
        }
39
40 33
        if ($this->isValid($yearTo)) {
41
            $qb
42 4
                ->andWhere("DATE_PART('year', m.releaseDate) <= :filter_year_to")
43 4
                ->setParameter('filter_year_to', $yearTo);
44
        }
45
46 33
        return $qb;
47
    }
48
49 34
    private function isValid(int $year): bool
50
    {
51 34
        return !($year < 1878 || $year > 2050);
52
    }
53
}
54