Completed
Push — master ( c5110b...a167e6 )
by Valentyn
13:46
created

MovieReleaseDateRepository::findAllByDate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 19

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 19
ccs 15
cts 15
cp 1
rs 9.6333
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Movies\Repository;
6
7
use App\Countries\Entity\Country;
8
use App\Movies\Entity\Movie;
9
use App\Movies\Entity\MovieReleaseDate;
10
use App\Users\Entity\User;
11
use App\Users\Entity\UserInterestedMovie;
12
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
13
use Doctrine\ORM\Query;
14
use Symfony\Bridge\Doctrine\RegistryInterface;
15
16
/**
17
 * @method MovieReleaseDate|null find($id, $lockMode = null, $lockVersion = null)
18
 * @method MovieReleaseDate|null findOneBy(array $criteria, array $orderBy = null)
19
 * @method MovieReleaseDate[]    findAll()
20
 * @method MovieReleaseDate[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
21
 */
22
class MovieReleaseDateRepository extends ServiceEntityRepository
23
{
24 1
    public function __construct(RegistryInterface $registry)
25
    {
26 1
        parent::__construct($registry, MovieReleaseDate::class);
27 1
    }
28
29
    public function findOneByCountry(int $movieId, Country $country): ?MovieReleaseDate
30
    {
31
        return $this->findOneBy([
32
            'movie' => $movieId,
33
            'country' => $country->getCode(),
34
        ]);
35
    }
36
37 1
    public function findAllByDate(string $date): Query
38
    {
39 1
        $qb = $this->getEntityManager()->createQueryBuilder();
40
41 1
        $qb = $qb->select('u')
42 1
            ->from(UserInterestedMovie::class, 'uim')
43 1
            ->leftJoin(User::class, 'u', 'WITH', 'uim.user = u')
44 1
            ->leftJoin('u.profile', 'up')
45 1
            ->leftJoin(Country::class, 'c', 'WITH', 'up.country_code = c.code')
46 1
            ->addSelect('c')
47 1
            ->leftJoin(MovieReleaseDate::class, 'mrd', 'WITH', 'mrd.country = c AND mrd.movie = uim.movie AND mrd.date = :date AND mrd.id IS NOT NULL')
48 1
            ->setParameter('date', $date)
49 1
            ->leftJoin(Movie::class, 'm', 'WITH', 'm = uim.movie')
50 1
            ->addSelect('m')
51 1
            ->where('mrd.id IS NOT NULL')
52 1
            ->getQuery();
53
54 1
        return $qb;
55
    }
56
}
57