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

DoctrineORMUserRepository::usersOfSearchString()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 13
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 10
nc 1
nop 2
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