Passed
Push — master ( 30d3d2...4e3abd )
by Jesse
01:56
created

BringerOfBadNews   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 30
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 15
dl 0
loc 30
rs 10
c 2
b 0
f 0
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A events() 0 13 1
A __construct() 0 3 1
A handle() 0 5 1
1
<?php declare(strict_types=1);
2
3
namespace Stratadox\CardGame\EventHandler;
4
5
use function assert;
6
use Stratadox\CardGame\Account\TriedOpeningAccountForUnknownEntity;
7
use Stratadox\CardGame\DomainEvent;
8
use Stratadox\CardGame\Match\Event\PlayerDidNotHaveTheMana;
9
use Stratadox\CardGame\Match\Event\TriedAttackingOutOfTurn;
10
use Stratadox\CardGame\Match\Event\TriedAttackingWithUnknownCard;
11
use Stratadox\CardGame\Match\Event\TriedBlockingOutOfTurn;
12
use Stratadox\CardGame\Match\Event\TriedPlayingCardOutOfTurn;
13
use Stratadox\CardGame\Match\Event\TriedStartingMatchForPendingProposal;
14
use Stratadox\CardGame\Match\Event\TriedStartingMatchWithoutProposal;
15
use Stratadox\CardGame\Proposal\TriedAcceptingExpiredProposal;
16
use Stratadox\CardGame\Proposal\TriedAcceptingUnknownProposal;
17
use Stratadox\CardGame\ReadModel\Refusals;
18
use Stratadox\CardGame\RefusalEvent;
19
20
final class BringerOfBadNews implements EventHandler
21
{
22
    private $refusals;
23
24
    public function __construct(Refusals $refusals)
25
    {
26
        $this->refusals = $refusals;
27
    }
28
29
    public function events(): iterable
30
    {
31
        return [
32
            TriedOpeningAccountForUnknownEntity::class,
33
            TriedStartingMatchForPendingProposal::class,
34
            TriedAcceptingExpiredProposal::class,
35
            TriedAcceptingUnknownProposal::class,
36
            TriedStartingMatchWithoutProposal::class,
37
            PlayerDidNotHaveTheMana::class,
38
            TriedPlayingCardOutOfTurn::class,
39
            TriedAttackingWithUnknownCard::class,
40
            TriedAttackingOutOfTurn::class,
41
            TriedBlockingOutOfTurn::class,
42
        ];
43
    }
44
45
    public function handle(DomainEvent $event): void
46
    {
47
        assert($event instanceof RefusalEvent);
48
49
        $this->refusals->addFor($event->aggregateId(), $event->reason());
50
    }
51
}
52