Failed Conditions
Pull Request — master (#2358)
by Nico
10:36 queued 05:05
created

RefactorRunner::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 0
c 0
b 0
f 0
nc 1
nop 2
dl 0
loc 4
ccs 2
cts 2
cp 1
crap 1
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Component\Refactor;
6
7
use Doctrine\ORM\EntityManagerInterface;
8
use Stu\Component\Alliance\Enum\AllianceJobPermissionEnum;
9
use Stu\Orm\Entity\AllianceJobPermission;
10
use Stu\Orm\Repository\AllianceJobRepositoryInterface;
11
12
final class RefactorRunner
13
{
14 1
    public function __construct(
15
        private EntityManagerInterface $entityManager,
16
        private AllianceJobRepositoryInterface $allianceJobRepository
17 1
    ) {}
18
19
    public function refactor(): void
20
    {
21
        echo "\n=== Alliance Job Permission Migration Start ===\n\n";
22
        $this->migrateJobPermissions();
23
        echo "\n=== Alliance Job Permission Migration Complete ===\n";
24
    }
25
26
    private function migrateJobPermissions(): void
27
    {
28
        $connection = $this->entityManager->getConnection();
29
30
        $jobs = $connection->fetchAllAssociative(
31
            'SELECT id, alliance_id, title, is_founder_permission, is_successor_permission, is_diplomatic_permission 
32
             FROM stu_alliances_jobs 
33
             ORDER BY alliance_id, sort'
34
        );
35
36
        echo "Found " . count($jobs) . " jobs to migrate\n\n";
37
38
        $migratedCount = 0;
39
        $permissionsCreated = 0;
40
41
        foreach ($jobs as $job) {
42
            $jobId = (int) $job['id'];
43
            $allianceId = (int) $job['alliance_id'];
44
            $title = $job['title'];
45
            $isFounder = (bool) $job['is_founder_permission'];
46
            $isSuccessor = (bool) $job['is_successor_permission'];
47
            $isDiplomatic = (bool) $job['is_diplomatic_permission'];
48
49
            $existingPermissions = $connection->fetchAllAssociative(
50
                'SELECT permission FROM stu_alliance_job_permission WHERE job_id = :jobId',
51
                ['jobId' => $jobId]
52
            );
53
54
            if (count($existingPermissions) > 0) {
55
                echo "  Job '{$title}' (ID: {$jobId}) already has permissions, skipping...\n";
56
                continue;
57
            }
58
59
            $jobEntity = $this->allianceJobRepository->find($jobId);
60
            if ($jobEntity === null) {
61
                echo "  Job ID {$jobId} not found, skipping...\n";
62
                continue;
63
            }
64
65
            $permissionsAdded = [];
66
67
            if ($isFounder) {
68
                $permission = new AllianceJobPermission();
69
                $permission->setJob($jobEntity);
70
                $permission->setPermission(AllianceJobPermissionEnum::FOUNDER->value);
71
                $this->entityManager->persist($permission);
72
                $permissionsAdded[] = 'FOUNDER';
73
                $permissionsCreated++;
74
            }
75
76
            if ($isSuccessor) {
77
                $permission = new AllianceJobPermission();
78
                $permission->setJob($jobEntity);
79
                $permission->setPermission(AllianceJobPermissionEnum::SUCCESSOR->value);
80
                $this->entityManager->persist($permission);
81
                $permissionsAdded[] = 'SUCCESSOR';
82
                $permissionsCreated++;
83
            }
84
85
            if ($isDiplomatic) {
86
                $permission = new AllianceJobPermission();
87
                $permission->setJob($jobEntity);
88
                $permission->setPermission(AllianceJobPermissionEnum::DIPLOMATIC->value);
89
                $this->entityManager->persist($permission);
90
                $permissionsAdded[] = 'DIPLOMATIC';
91
                $permissionsCreated++;
92
            }
93
94
            if (count($permissionsAdded) > 0) {
95
                echo "  Migrated job '{$title}' (ID: {$jobId}, Alliance: {$allianceId})\n";
96
                echo "    Added permissions: " . implode(', ', $permissionsAdded) . "\n";
97
                $migratedCount++;
98
            } else {
99
                echo "  Job '{$title}' (ID: {$jobId}) has no permissions to migrate\n";
100
            }
101
        }
102
103
        $this->entityManager->flush();
104
105
        echo "\nSummary:\n";
106
        echo "  - Jobs processed: " . count($jobs) . "\n";
107
        echo "  - Jobs migrated: {$migratedCount}\n";
108
        echo "  - Permissions created: {$permissionsCreated}\n";
109
        echo "\nMigration completed successfully!\n";
110
    }
111
}
112