Issues (125)

src/Resolver/UseCase/UseCaseDefinition.php (1 issue)

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