Test Failed
Push — master ( 7d634a...f0cc3f )
by Hirofumi
02:27
created

DoctrineJobStore   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 65
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Test Coverage

Coverage 87.5%

Importance

Changes 0
Metric Value
dl 0
loc 65
c 0
b 0
f 0
wmc 5
lcom 1
cbo 7
ccs 21
cts 24
cp 0.875
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 8 1
A append() 0 13 1
A storedJobsSince() 0 12 2
A storedJobOfId() 0 7 1
1
<?php
2
3
namespace Shippinno\Job\Infrastructure\Domain\Model;
4
5
use Doctrine\ORM\EntityManager;
6
use Doctrine\ORM\EntityRepository;
7
use Doctrine\ORM\Mapping\ClassMetadata;
8
use Shippinno\Job\Application\Messaging\JobFlightManager;
9
use Shippinno\Job\Domain\Model\Job;
10
use Shippinno\Job\Domain\Model\JobSerializer;
11
use Shippinno\Job\Domain\Model\JobStore;
12
use Shippinno\Job\Domain\Model\StoredJob;
13
14
class DoctrineJobStore extends EntityRepository implements JobStore
15
{
16
    /**
17
     * @var JobSerializer
18
     */
19
    private $jobSerializer;
20
21
    /**
22
     * @param EntityManager $em
23
     * @param ClassMetadata $class
24
     * @param JobSerializer $jobSerializer
25
     */
26 2
    public function __construct(
27
        EntityManager $em,
28
        ClassMetadata $class,
29
        JobSerializer $jobSerializer
30
    ) {
31 2
        parent::__construct($em, $class);
32 2
        $this->jobSerializer = $jobSerializer;
33 2
    }
34
35
    /**
36
     * {@inheritdoc}
37
     */
38 2
    public function append(Job $job): StoredJob
39
    {
40 2
        $storedJob = new StoredJob(
41 2
            get_class($job),
42 2
            $this->jobSerializer->serialize($job),
43 2
            $job->createdAt(),
44 2
            $job->isExpendable(),
45 2
            $job->fifoGroupId()
46
        );
47 2
        $this->getEntityManager()->persist($storedJob);
48
49 2
        return $storedJob;
50
    }
51
52
    /**
53
     * {@inheritdoc}
54
     */
55 2
    public function storedJobsSince(?int $jobId): array
56
    {
57 2
        $query = $this->createQueryBuilder('j');
58 2
        if (null !== $jobId) {
59 1
            $query->where('j.id > :id');
60 1
            $query->setParameters(['id' => $jobId]);
61
        }
62 2
        $query->setMaxResults(100);
63 2
        $query->orderBy('j.id');
64
65 2
        return $query->getQuery()->getResult();
66
    }
67
68
    /**
69
     * {@inheritdoc}
70
     */
71
    public function storedJobOfId(int $jobId): ?StoredJob
72
    {
73
        /** @var StoredJob|null $storedJob */
74
        $storedJob = $this->find($jobId);
75
76
        return $storedJob;
77
    }
78
}
79