Test Failed
Push — master ( ad3b13...7d634a )
by Hirofumi
02:22
created

DoctrineJobStore   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 8

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 8
dl 0
loc 74
ccs 0
cts 26
cp 0
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 10 1
A append() 0 15 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
     * @var JobFlightManager
23
     */
24
    private $jobFlightManager;
25
26
    /**
27
     * @param EntityManager $em
28
     * @param ClassMetadata $class
29
     * @param JobSerializer $jobSerializer
30
     */
31
    public function __construct(
32
        EntityManager $em,
33
        ClassMetadata $class,
34
        JobSerializer $jobSerializer,
35
        JobFlightManager $jobFlightManager
36
    ) {
37
        parent::__construct($em, $class);
38
        $this->jobSerializer = $jobSerializer;
39
        $this->jobFlightManager = $jobFlightManager;
40
    }
41
42
    /**
43
     * {@inheritdoc}
44
     */
45
    public function append(Job $job): StoredJob
46
    {
47
        $storedJob = new StoredJob(
48
            get_class($job),
49
            $this->jobSerializer->serialize($job),
50
            $job->createdAt(),
51
            $job->isExpendable(),
52
            $job->fifoGroupId()
53
        );
54
        $this->getEntityManager()->persist($storedJob);
55
56
        $this->jobFlightManager->created($storedJob->id(), $storedJob->name(), env('JOB_ENQUEUE_TOPIC'));
57
58
        return $storedJob;
59
    }
60
61
    /**
62
     * {@inheritdoc}
63
     */
64
    public function storedJobsSince(?int $jobId): array
65
    {
66
        $query = $this->createQueryBuilder('j');
67
        if (null !== $jobId) {
68
            $query->where('j.id > :id');
69
            $query->setParameters(['id' => $jobId]);
70
        }
71
        $query->setMaxResults(100);
72
        $query->orderBy('j.id');
73
74
        return $query->getQuery()->getResult();
75
    }
76
77
    /**
78
     * {@inheritdoc}
79
     */
80
    public function storedJobOfId(int $jobId): ?StoredJob
81
    {
82
        /** @var StoredJob|null $storedJob */
83
        $storedJob = $this->find($jobId);
84
85
        return $storedJob;
86
    }
87
}
88