Completed
Push — master ( f3167a...682c42 )
by Emil
02:36
created

QueuedTaskRepository::isRunning()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 18
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 18
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 12
nc 2
nop 1
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
        try {
73
            $this->getEntityManager()
74
                ->createQuery('SELECT r
75
                  FROM GloobyTaskBundle:QueuedTask r
76
                  WHERE r.name = :name AND r.status = :status')
77
                ->setParameter('name', $name)
78
                ->setParameter('status', QueuedTaskInterface::STATUS_RUNNING)
79
                ->useQueryCache(true)
80
                ->setMaxResults(1)
81
                ->getSingleResult();
82
83
            return true;
84
        } catch (NoResultException $e) {
85
            return false;
86
        }
87
    }
88
}
89