Completed
Pull Request — master (#15)
by Wachter
06:21
created

TaskExecutionRepository::findScheduled()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 14
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 14
rs 9.4285
cc 2
eloc 10
nc 2
nop 1
1
<?php
2
3
/*
4
 * This file is part of php-task library.
5
 *
6
 * (c) php-task
7
 *
8
 * This source file is subject to the MIT license that is bundled
9
 * with this source code in the file LICENSE.
10
 */
11
12
namespace Task\TaskBundle\Entity;
13
14
use Doctrine\ORM\EntityRepository;
15
use Doctrine\ORM\NoResultException;
16
use Task\Execution\TaskExecutionInterface;
17
use Task\TaskInterface;
18
use Task\TaskStatus;
19
20
/**
21
 * Repository for task-execution.
22
 */
23
class TaskExecutionRepository extends EntityRepository
24
{
25
    /**
26
     * Returns task-execution by task and scheduled-time.
27
     *
28
     * @param TaskInterface $task
29
     * @param \DateTime $scheduleTime
30
     *
31
     * @return TaskExecutionInterface
32
     */
33
    public function findByScheduledTime(TaskInterface $task, \DateTime $scheduleTime)
34
    {
35
        try {
36
            return $this->createQueryBuilder('e')
37
                ->innerJoin('e.task', 't')
38
                ->where('t.uuid = :uuid')
39
                ->andWhere('e.scheduleTime = :scheduleTime')
40
                ->setParameter('uuid', $task->getUuid())
41
                ->setParameter('scheduleTime', $scheduleTime)
42
                ->getQuery()
43
                ->getSingleResult();
44
        } catch (NoResultException $e) {
45
            return;
46
        }
47
    }
48
49
    /**
50
     * Returns scheduled task-execution.
51
     *
52
     * @param \DateTime|null $dateTime
53
     *
54
     * @return TaskExecutionInterface[]
55
     */
56
    public function findScheduled(\DateTime $dateTime = null)
57
    {
58
        if ($dateTime === null) {
59
            $dateTime = new \DateTime();
60
        }
61
62
        return $this->createQueryBuilder('e')
63
            ->innerJoin('e.task', 't')
64
            ->where('e.status = :status AND e.scheduleTime < :dateTime')
65
            ->setParameter('status', TaskStatus::PLANNED)
66
            ->setParameter('dateTime', $dateTime)
67
            ->getQuery()
68
            ->getResult();
69
    }
70
}
71