Passed
Push — master ( 8cd431...bc71f5 )
by Janko
09:12
created

TradepostDeletionHandler::delete()   A

Complexity

Conditions 5
Paths 7

Size

Total Lines 47
Code Lines 30

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 30

Importance

Changes 0
Metric Value
cc 5
eloc 30
nc 7
nop 1
dl 0
loc 47
ccs 0
cts 33
cp 0
crap 30
rs 9.1288
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Stu\Component\Player\Deletion\Handler;
6
7
use Override;
8
use Stu\Module\History\Lib\EntryCreatorInterface;
9
use Stu\Module\Message\Lib\PrivateMessageSenderInterface;
10
use Stu\Module\PlayerSetting\Lib\UserConstants;
11
use Stu\Orm\Entity\User;
12
use Stu\Orm\Repository\SpacecraftRepositoryInterface;
13
use Stu\Orm\Repository\StorageRepositoryInterface;
14
use Stu\Orm\Repository\TradePostRepositoryInterface;
15
use Stu\Orm\Repository\UserRepositoryInterface;
16
17
final class TradepostDeletionHandler implements PlayerDeletionHandlerInterface
18
{
19
    private const string ORPHANED_TRADEPOST_NAME = 'Verlassener Handelsposten';
0 ignored issues
show
Bug introduced by
A parse error occurred: Syntax error, unexpected T_STRING, expecting '=' on line 19 at column 25
Loading history...
20
21 1
    public function __construct(
22
        private TradePostRepositoryInterface $tradePostRepository,
23
        private SpacecraftRepositoryInterface $spacecraftRepository,
24
        private UserRepositoryInterface $userRepository,
25
        private StorageRepositoryInterface $storageRepository,
26
        private EntryCreatorInterface $entryCreator,
27
        private PrivateMessageSenderInterface $privateMessageSender
28 1
    ) {}
29
30
    #[Override]
31
    public function delete(User $user): void
32
    {
33
        $fallbackUser = $this->userRepository->getFallbackUser();
34
35
        foreach ($this->tradePostRepository->getByUser($user->getId()) as $tradepost) {
36
            $station = $tradepost->getStation();
37
38
            // send PMs to storage owners except tradepost owner
39
            foreach ($this->tradePostRepository->getUsersWithStorageOnTradepost($tradepost->getId()) as $user) {
40
                if ($user->getId() !== $tradepost->getUserId()) {
41
                    $this->privateMessageSender->send(
42
                        UserConstants::USER_NOONE,
43
                        $user->getId(),
44
                        sprintf(
45
                            'Der Handelsposten "%s" bei den Koordinaten %s wurde verlassen. Du solltest deine Waren hier schleunigst abholen, sonst gehen sie verloren.',
46
                            $tradepost->getName(),
47
                            $station->getSectorString()
48
                        )
49
                    );
50
                }
51
            }
52
53
            //create history entry
54
            $this->entryCreator->addEntry(
55
                'Der Handelsposten in Sektor ' . $station->getSectorString() . ' wurde verlassen.',
56
                UserConstants::USER_NOONE,
57
                $station
58
            );
59
60
            //transfer tradepost to noone user
61
            $tradepost->setUser($fallbackUser);
62
            $tradepost->setName(self::ORPHANED_TRADEPOST_NAME);
63
            $tradepost->setDescription(self::ORPHANED_TRADEPOST_NAME);
64
            $tradepost->setTradeNetwork(UserConstants::USER_NOONE);
65
            $this->tradePostRepository->save($tradepost);
66
67
            $station->setUser($fallbackUser);
68
            $station->setName(self::ORPHANED_TRADEPOST_NAME);
69
            $station->getCondition()->setDisabled(true);
70
            $this->spacecraftRepository->save($station);
71
72
            //change torpedo owner
73
            if ($station->getTorpedoStorage() !== null) {
74
                $storage = $station->getTorpedoStorage()->getStorage();
75
                $storage->setUser($fallbackUser);
76
                $this->storageRepository->save($storage);
77
            }
78
        }
79
    }
80
}
81