Completed
Push — master ( e9ea75...224581 )
by Derek Stephen
03:25
created

PersonRepository   A

Complexity

Total Complexity 25

Size/Duplication

Total Lines 173
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 5

Test Coverage

Coverage 10.96%

Importance

Changes 0
Metric Value
wmc 25
lcom 2
cbo 5
dl 0
loc 173
ccs 8
cts 73
cp 0.1096
rs 10
c 0
b 0
f 0

14 Methods

Rating   Name   Duplication   Size   Complexity  
A save() 0 6 1
A delete() 0 5 1
A findByCriteria() 0 20 1
A checkId() 0 7 2
A checkFirstname() 0 7 2
A checkMiddlename() 0 7 2
A checkLastname() 0 7 2
A checkAka() 0 7 2
A checkBirthplace() 0 7 2
A checkCountry() 0 7 2
A checkDob() 0 7 2
A checkOrder() 0 5 2
A checkLimit() 0 4 2
A checkOffset() 0 4 2
1
<?php
2
3
namespace Del\Person\Repository;
4
5
use Del\Person\Entity\Person as PersonEntity;
6
use Del\Person\Criteria\PersonCriteria;
7
use Doctrine\ORM\EntityRepository;
8
use Doctrine\ORM\QueryBuilder;
9
10
class PersonRepository extends EntityRepository
11
{
12
    /** @var QueryBuilder $qb */
13
    private $qb;
14
15
    /**
16
     * @param PersonEntity $person
17
     * @return PersonEntity
18
     * @throws \Doctrine\ORM\ORMException
19
     * @throws \Doctrine\ORM\OptimisticLockException
20
     */
21 2
    public function save(PersonEntity $person)
22
    {
23 2
        $this->_em->persist($person);
24 2
        $this->_em->flush();
25 2
        return $person;
26
    }
27
28
    /**
29
     * @param PersonEntity $person
30
     * @throws \Doctrine\ORM\ORMException
31
     * @throws \Doctrine\ORM\OptimisticLockException
32
     */
33 1
    public function delete(PersonEntity $person)
34
    {
35 1
        $this->_em->remove($person);
36 1
        $this->_em->flush();
37 1
    }
38
39
40
41
    /**
42
     * @param PersonCriteria $criteria
43
     * @return array
44
     */
45
    public function findByCriteria(PersonCriteria $criteria)
46
    {
47
        $this->qb = $this->createQueryBuilder('p');
48
49
        $this->checkId($criteria);
50
        $this->checkFirstname($criteria);
51
        $this->checkMiddlename($criteria);
52
        $this->checkLastname($criteria);
53
        $this->checkAka($criteria);
54
        $this->checkBirthplace($criteria);
55
        $this->checkCountry($criteria);
56
        $this->checkDob($criteria);
57
        $this->checkOrder($criteria);
58
        $this->checkLimit($criteria);
59
        $this->checkOffset($criteria);
60
61
        $query = $this->qb->getQuery();
62
        unset($this->qb);
63
        return $query->getResult();
64
    }
65
66
67
    /**
68
     * @param PersonCriteria $criteria
69
     */
70
    private function checkId(PersonCriteria $criteria)
71
    {
72
        if($criteria->hasId()) {
73
            $this->qb->where('p.id = :id');
74
            $this->qb->setParameter('id', $criteria->getId());
75
        }
76
    }
77
78
79
    /**
80
     * @param PersonCriteria $criteria
81
     */
82
    private function checkFirstname(PersonCriteria $criteria)
83
    {
84
        if($criteria->hasFirstname()) {
85
            $this->qb->where('p.firstname = :firstname');
86
            $this->qb->setParameter('firstname', $criteria->getFirstname());
87
        }
88
    }
89
90
91
    /**
92
     * @param PersonCriteria $criteria
93
     */
94
    private function checkMiddlename(PersonCriteria $criteria)
95
    {
96
        if($criteria->hasMiddlename()) {
97
            $this->qb->where('p.middlename = :middlename');
98
            $this->qb->setParameter('middlename', $criteria->getMiddlename());
99
        }
100
    }
101
102
    /**
103
     * @param PersonCriteria $criteria
104
     */
105
    private function checkLastname(PersonCriteria $criteria)
106
    {
107
        if($criteria->hasLastname()) {
108
            $this->qb->where('p.lastname = :lastname');
109
            $this->qb->setParameter('lastname', $criteria->getLastname());
110
        }
111
    }
112
113
    /**
114
     * @param PersonCriteria $criteria
115
     */
116
    private function checkAka(PersonCriteria $criteria)
117
    {
118
        if($criteria->hasAka()) {
119
            $this->qb->andWhere('p.aka = :aka');
120
            $this->qb->setParameter('aka', $criteria->getAka());
121
        }
122
    }
123
124
    /**
125
     * @param PersonCriteria $criteria
126
     */
127
    private function checkBirthplace(PersonCriteria $criteria)
128
    {
129
        if($criteria->hasBirthplace()) {
130
            $this->qb->andWhere('p.birthplace = :birthplace');
131
            $this->qb->setParameter('birthplace', $criteria->getBirthplace());
132
        }
133
    }
134
135
    /**
136
     * @param PersonCriteria $criteria
137
     */
138
    private function checkCountry(PersonCriteria $criteria)
139
    {
140
        if($criteria->hasCountry()) {
141
            $this->qb->andWhere('p.country = :country');
142
            $this->qb->setParameter('country', $criteria->getCountry());
143
        }
144
    }
145
146
    /**
147
     * @param PersonCriteria $criteria
148
     */
149
    private function checkDob(PersonCriteria $criteria)
150
    {
151
        if($criteria->hasDob()) {
152
            $this->qb->andWhere('p.dob = :dob');
153
            $this->qb->setParameter('dob', $criteria->getDob());
154
        }
155
    }
156
157
158
    /**
159
     * @param PersonCriteria $criteria
160
     */
161
    private function checkOrder(PersonCriteria $criteria)
162
    {
163
        $criteria->hasOrder() ? $this->qb->addOrderBy('p.'.$criteria->getOrder(), $criteria->getOrderDirection()) : null;
164
165
    }
166
167
    /**
168
     * @param PersonCriteria $criteria
169
     */
170
    private function checkLimit(PersonCriteria $criteria)
171
    {
172
        $criteria->hasLimit() ? $this->qb->setMaxResults($criteria->getLimit()) : null;
173
    }
174
175
    /**
176
     * @param PersonCriteria $criteria
177
     */
178
    private function checkOffset(PersonCriteria $criteria)
179
    {
180
        $criteria->hasOffset() ? $this->qb->setFirstResult($criteria->getOffset()) : null;
181
    }
182
}
183