Completed
Push — master ( b25a4a...088f76 )
by Emil
02:07
created

QueuedTaskRepository::isStatus()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 18
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 18
rs 9.4285
cc 2
eloc 12
nc 2
nop 2
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
     * @param string $name
68
     * @return bool
69
     */
70
    public function isRunning($name)
71
    {
72
        return $this->isStatus($name, QueuedTaskInterface::STATUS_RUNNING);
73
    }
74
75
    /**
76
     * @param string $name
77
     * @return bool
78
     */
79
    public function isQueued($name)
80
    {
81
        return $this->isStatus($name, QueuedTaskInterface::STATUS_QUEUED);
82
    }
83
84
    /**
85
     * @param string $name
86
     * @param string $status
87
     * @return bool
88
     */
89
    private function isStatus($name, $status)
90
    {
91
        try {
92
            $this->getEntityManager()
93
                ->createQuery('SELECT r
94
                  FROM GloobyTaskBundle:QueuedTask r
95
                  WHERE r.name = :name AND r.status = :status')
96
                ->setParameter('name', $name)
97
                ->setParameter('status', $status)
98
                ->useQueryCache(true)
99
                ->setMaxResults(1)
100
                ->getSingleResult();
101
102
            return true;
103
        } catch (NoResultException $e) {
104
            return false;
105
        }
106
    }
107
}
108