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
 *     sagaIds: list<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<SagaIdDefinition> $sagaIds
28
     * @param list<SagaEventSubscriberDefinition> $eventSubscribers
29
     */
30 13
    public function __construct(
31
        public string $sagaClassName,
32
        public string $sagaName,
33
        public array $sagaIds,
34
        public array $eventSubscribers,
35 13
    ) {}
36
37 4
    public function toPayload(): array
38
    {
39 4
        return [
40 4
            'sagaClassName' => $this->sagaClassName,
41 4
            'sagaName' => $this->sagaName,
42 4
            'sagaIds' => array_map(fn($sagaId) => $sagaId->toPayload(), $this->sagaIds),
43 4
            'eventSubscribers' => array_map(fn($eventSubscriber) => $eventSubscriber->toPayload(), $this->eventSubscribers),
44 4
        ];
45
    }
46
47 4
    public static function fromPayload(array $payload): self
48
    {
49 4
        return new self(
50 4
            $payload['sagaClassName'],
51 4
            $payload['sagaName'],
52 4
            array_map(fn($sagaId) => SagaIdDefinition::fromPayload($sagaId), $payload['sagaIds']),
53 4
            array_map(fn($eventSubscriber) => SagaEventSubscriberDefinition::fromPayload($eventSubscriber), $payload['eventSubscribers']),
54 4
        );
55
    }
56
}
57