Issues (135)

src/Resolver/Saga/SagaDefinition.php (1 issue)

Labels
Severity
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Gember\EventSourcing\Resolver\Saga;
6
7
use Gember\EventSourcing\Resolver\Common\SagaId\SagaIdDefinition;
8
use Gember\EventSourcing\Util\Serialization\Serializable;
9
10
/**
11
 * @phpstan-import-type SagaIdDefinitionPayload from SagaIdDefinition
12
 * @phpstan-import-type SagaEventSubscriberDefinitionPayload from SagaEventSubscriberDefinition
13
 *
14
 * @phpstan-type SagaDefinitionPayload array{
15
 *     sagaClassName: class-string,
16
 *     sagaName: string,
17
 *     sagaId: SagaIdDefinitionPayload,
18
 *     eventSubscribers: list<SagaEventSubscriberDefinitionPayload>
19
 * }
20
 *
21
 * @implements Serializable<SagaDefinitionPayload, SagaDefinition>
22
 */
23
final readonly class SagaDefinition implements Serializable
0 ignored issues
show
A parse error occurred: Syntax error, unexpected T_READONLY, expecting T_CLASS on line 23 at column 6
Loading history...
24
{
25
    /**
26
     * @param class-string $sagaClassName
27
     * @param list<SagaEventSubscriberDefinition> $eventSubscribers
28
     */
29 13
    public function __construct(
30
        public string $sagaClassName,
31
        public string $sagaName,
32
        public SagaIdDefinition $sagaId,
33
        public array $eventSubscribers,
34 13
    ) {}
35
36 4
    public function toPayload(): array
37
    {
38 4
        return [
39 4
            'sagaClassName' => $this->sagaClassName,
40 4
            'sagaName' => $this->sagaName,
41 4
            'sagaId' => $this->sagaId->toPayload(),
42 4
            'eventSubscribers' => array_map(fn($eventSubscriber) => $eventSubscriber->toPayload(), $this->eventSubscribers),
43 4
        ];
44
    }
45
46 4
    public static function fromPayload(array $payload): self
47
    {
48 4
        return new self(
49 4
            $payload['sagaClassName'],
50 4
            $payload['sagaName'],
51 4
            SagaIdDefinition::fromPayload($payload['sagaId']),
52 4
            array_map(fn($eventSubscriber) => SagaEventSubscriberDefinition::fromPayload($eventSubscriber), $payload['eventSubscribers']),
53 4
        );
54
    }
55
}
56