Completed
Push — master ( 410c5e...621de0 )
by Emil
07:36
created

QueuedTaskRepository::findRunning()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 6
nc 1
nop 0
1
<?php
2
3
namespace Glooby\TaskBundle\Entity;
4
5
use Doctrine\ORM\EntityRepository;
6
use Doctrine\ORM\NoResultException;
7
use Glooby\TaskBundle\Model\QueuedTaskInterface;
8
9
/**
10
 * @author Emil Kilhage
11
 */
12
class QueuedTaskRepository extends EntityRepository
13
{
14
    /**
15
     * @param string $name
16
     * @param \DateTime $executeAt
17
     * @return QueuedTaskInterface
18
     */
19
    public function getByNameAndExecuteAt($name, \DateTime $executeAt)
20
    {
21
        return $this->getEntityManager()
22
            ->createQuery('SELECT r
23
              FROM GloobyTaskBundle:QueuedTask r
24
              WHERE r.name = :name AND r.executeAt = :executeAt')
25
            ->setParameter('name', $name)
26
            ->setParameter('executeAt', $executeAt)
27
            ->useQueryCache(true)
28
            ->getSingleResult();
29
    }
30
31
    /**
32
     * @param string $name
33
     * @return QueuedTaskInterface
34
     */
35
    public function getByNameAndExecuteAtBeforeNow($name)
36
    {
37
        return $this->getEntityManager()
38
            ->createQuery('SELECT r
39
              FROM GloobyTaskBundle:QueuedTask r
40
              WHERE r.name = :name AND r.executeAt <= :now')
41
            ->setParameter('name', $name)
42
            ->setParameter('now', new \DateTime())
43
            ->useQueryCache(true)
44
            ->setMaxResults(1)
45
            ->getSingleResult();
46
    }
47
48
    /**
49
     * @param int $limit
50
     * @return QueuedTaskInterface[]
51
     */
52
    public function findQueued($limit)
53
    {
54
        return $this->getEntityManager()
55
            ->createQuery('SELECT r
56
              FROM GloobyTaskBundle:QueuedTask r
57
              WHERE r.status = :status AND r.executeAt <= :now
58
              ORDER BY r.executeAt ASC')
59
            ->setParameter('status', QueuedTaskInterface::STATUS_QUEUED)
60
            ->setParameter('now', new \DateTime())
61
            ->setMaxResults($limit)
62
            ->useQueryCache(true)
63
            ->getResult();
64
    }
65
66
    /**
67
     * @return QueuedTaskInterface[]
68
     */
69
    public function findRunning()
70
    {
71
        return $this->getEntityManager()
72
            ->createQuery('SELECT r
73
              FROM GloobyTaskBundle:QueuedTask r
74
              WHERE r.status = :status')
75
            ->setParameter('status', QueuedTaskInterface::STATUS_RUNNING)
76
            ->useQueryCache(true)
77
            ->getResult();
78
    }
79
80
    /**
81
     * @param string $name
82
     * @return bool
83
     */
84
    public function isRunning($name)
85
    {
86
        return $this->isStatus($name, QueuedTaskInterface::STATUS_RUNNING);
87
    }
88
89
    /**
90
     * @param string $name
91
     * @return bool
92
     */
93
    public function isQueued($name)
94
    {
95
        return $this->isStatus($name, QueuedTaskInterface::STATUS_QUEUED);
96
    }
97
98
    /**
99
     * @param string $name
100
     * @param string $status
101
     * @return bool
102
     */
103
    private function isStatus($name, $status)
104
    {
105
        try {
106
            $this->getEntityManager()
107
                ->createQuery('SELECT r
108
                  FROM GloobyTaskBundle:QueuedTask r
109
                  WHERE r.name = :name AND r.status = :status')
110
                ->setParameter('name', $name)
111
                ->setParameter('status', $status)
112
                ->useQueryCache(true)
113
                ->setMaxResults(1)
114
                ->getSingleResult();
115
116
            return true;
117
        } catch (NoResultException $e) {
118
            return false;
119
        }
120
    }
121
}
122