Test Failed
Pull Request — dev (#1952)
by Janko
02:59
created

SpacecraftSystemRepository   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 121
Duplicated Lines 0 %

Test Coverage

Coverage 39.34%

Importance

Changes 0
Metric Value
eloc 69
dl 0
loc 121
ccs 24
cts 61
cp 0.3934
rs 10
c 0
b 0
f 0
wmc 9

9 Methods

Rating   Name   Duplication   Size   Complexity  
A getByShip() 0 6 1
A getWebOwningShipSystem() 0 17 1
A isSystemHealthy() 0 17 1
A delete() 0 6 1
A prototype() 0 4 1
A getTrackingShipSystems() 0 17 1
A truncateByShip() 0 12 1
A save() 0 6 1
A getWebConstructingShipSystems() 0 17 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Orm\Repository;
6
7
use Doctrine\ORM\EntityRepository;
8
use Override;
0 ignored issues
show
Bug introduced by
The type Override was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
9
use Stu\Component\Spacecraft\System\SpacecraftSystemTypeEnum;
10
use Stu\Orm\Entity\Spacecraft;
11
use Stu\Orm\Entity\SpacecraftSystem;
12
13
/**
14
 * @extends EntityRepository<SpacecraftSystem>
15
 */
16
final class SpacecraftSystemRepository extends EntityRepository implements SpacecraftSystemRepositoryInterface
17 1
{
18
    #[Override]
19
    public function prototype(): SpacecraftSystem
20 1
    {
21
        return new SpacecraftSystem();
22
    }
23 28
24
    #[Override]
25
    public function save(SpacecraftSystem $post): void
26 28
    {
27
        $em = $this->getEntityManager();
28 28
29
        $em->persist($post);
30
    }
31
32
    #[Override]
33
    public function delete(SpacecraftSystem $post): void
34
    {
35
        $em = $this->getEntityManager();
36
37
        $em->remove($post);
38
    }
39
40
    #[Override]
41
    public function getByShip(int $shipId): array
42
    {
43
        return $this->findBy(
44
            ['spacecraft_id' => $shipId],
45
            ['system_type' => 'asc']
46
        );
47
    }
48
49
    #[Override]
50
    public function getTrackingShipSystems(int $targetId): array
51
    {
52
        return $this->getEntityManager()
53
            ->createQuery(
54
                sprintf(
55
                    'SELECT ss FROM %s ss
56
                    WHERE ss.system_type = :systemType
57 1
                    AND ss.data LIKE :target',
58
                    SpacecraftSystem::class
59
                )
60 1
            )
61 1
            ->setParameters([
62 1
                'systemType' => SpacecraftSystemTypeEnum::TRACKER,
63 1
                'target' => sprintf('%%"targetId":%d%%', $targetId)
64
            ])
65
            ->getResult();
66
    }
67
68
    #[Override]
69 1
    public function getWebConstructingShipSystems(int $webId): array
70
    {
71 1
        return $this->getEntityManager()
72 1
            ->createQuery(
73 1
                sprintf(
74 1
                    'SELECT ss FROM %s ss
75
                    WHERE ss.system_type = :systemType
76 1
                    AND ss.data LIKE :target',
77 1
                    SpacecraftSystem::class
78 1
                )
79 1
            )
80 1
            ->setParameters([
81 1
                'systemType' => SpacecraftSystemTypeEnum::THOLIAN_WEB,
82 1
                'target' => sprintf('%%"webUnderConstructionId":%d%%', $webId)
83 1
            ])
84 1
            ->getResult();
85
    }
86
87
    #[Override]
88
    public function getWebOwningShipSystem(int $webId): ?SpacecraftSystem
89
    {
90
        return $this->getEntityManager()
91
            ->createQuery(
92
                sprintf(
93
                    'SELECT ss FROM %s ss
94
                    WHERE ss.system_type = :systemType
95
                    AND ss.data LIKE :target',
96
                    SpacecraftSystem::class
97
                )
98
            )
99
            ->setParameters([
100
                'systemType' => SpacecraftSystemTypeEnum::THOLIAN_WEB,
101
                'target' => sprintf('%%"ownedWebId":%d%%', $webId)
102
            ])
103
            ->getOneOrNullResult();
104
    }
105
106
    #[Override]
107
    public function isSystemHealthy(Spacecraft $spacecraft, SpacecraftSystemTypeEnum $type): bool
108
    {
109
        return (int)$this->getEntityManager()
110
            ->createQuery(
111
                sprintf(
112
                    'SELECT ss.status FROM %s ss
113
                    WHERE ss.system_type = :systemType
114
                    AND ss.spacecraft = :spacecraft',
115
                    SpacecraftSystem::class
116
                )
117
            )
118
            ->setParameters([
119
                'systemType' => $type->value,
120
                'spacecraft' => $spacecraft
121
            ])
122
            ->getSingleScalarResult() > 0;
123
    }
124
125
    #[Override]
126
    public function truncateByShip(int $shipId): void
127
    {
128
        $this->getEntityManager()
129
            ->createQuery(
130
                sprintf(
131
                    'DELETE FROM %s s WHERE s.spacecraft_id = :shipId',
132
                    SpacecraftSystem::class
133
                )
134
            )
135
            ->setParameter('shipId', $shipId)
136
            ->execute();
137
    }
138
}
139