Completed
Push — master ( c7a062...ac0937 )
by Beñat
12s
created

DoctrineORMUserRepository   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Importance

Changes 0
Metric Value
wmc 3
lcom 0
cbo 4
dl 0
loc 34
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A userOfUsername() 0 4 1
A usersOfIds() 0 12 1
A usersOfSearchString() 0 13 1
1
<?php
2
3
/*
4
 * This file is part of the Kreta package.
5
 *
6
 * (c) Beñat Espiña <[email protected]>
7
 * (c) Gorka Laucirica <[email protected]>
8
 *
9
 * For the full copyright and license information, please view the LICENSE
10
 * file that was distributed with this source code.
11
 */
12
13
declare(strict_types=1);
14
15
namespace Kreta\IdentityAccess\Infrastructure\Persistence\Doctrine\ORM\User;
16
17
use BenGorUser\DoctrineORMBridge\Infrastructure\Persistence\DoctrineORMUserRepository as BaseDoctrineORMUserRepository;
18
use Kreta\IdentityAccess\Domain\Model\User\User;
19
use Kreta\IdentityAccess\Domain\Model\User\Username;
20
use Kreta\IdentityAccess\Domain\Model\User\UserRepository;
21
22
class DoctrineORMUserRepository extends BaseDoctrineORMUserRepository implements UserRepository
23
{
24
    public function userOfUsername(Username $username) : ?User
25
    {
26
        return $this->findOneBy(['username.username' => $username->username()]);
27
    }
28
29
    public function usersOfIds(array $userIds) : array
30
    {
31
        $queryBuilder = $this->createQueryBuilder('u');
32
33
        return $queryBuilder
34
            ->select('u, field(u.id, :ids) as HIDDEN field')
35
            ->where($queryBuilder->expr()->in('u.id', ':ids'))
36
            ->setParameter('ids', $userIds)
37
            ->orderBy('field')
38
            ->getQuery()
39
            ->getResult();
40
    }
41
42
    public function usersOfSearchString($search, array $excludedIds = []) : array
43
    {
44
        $queryBuilder = $this->createQueryBuilder('u');
45
46
        return $queryBuilder
47
            ->select('u')
48
            ->where($queryBuilder->expr()->like('u.username.username', ':search'))
49
            ->andWhere($queryBuilder->expr()->notIn('u.id', ':ids'))
50
            ->setParameter('search', '%' . $search . '%')
51
            ->setParameter('ids', $excludedIds)
52
            ->getQuery()
53
            ->getResult();
54
    }
55
}
56