Lines 93.33% 14 / 15
Functions and Methods 66.66% 2 / 3
Classes and Traits 0.00% 0 / 1
Name Lines Functions and Methods CRAP Classes and Traits
SubscribeTriggerHandler 93.33% 14 / 15 66.66% 2 / 3 3.00 0.00% 0 / 1
 __construct 100.00% 1 / 1 100.00% 1 / 1 1
 handledMessageClass 0.00% 0 / 1 0.00% 0 / 1 2
 handle 100.00% 13 / 13 100.00% 1 / 1 1
1<?php
2
3declare(strict_types=1);
4
5namespace Stewart\Runtime\Broker\Message;
6
7use Psr\Log\LoggerInterface;
8use Stewart\Contracts\Selector\Selector;
9use Stewart\Runtime\Broker\BrokerSubscription;
10use Stewart\Runtime\Broker\SubscriptionRegistry;
11use Stewart\Runtime\Broker\WorkerHandle;
12use Stewart\Runtime\Ipc\Message\SubscribeTrigger;
13use Stewart\Runtime\Ipc\Message\SubscriptionAck;
14use Stewart\Runtime\Ipc\Message\WorkerMessage;
15use Stewart\Runtime\Model\SubscriptionKind;
16
17/** @implements WorkerMessageHandler<SubscribeTrigger> */
18final readonly class SubscribeTriggerHandler implements WorkerMessageHandler
19{
20    public function __construct(
21        private SubscriptionRegistry $registry,
22        private LoggerInterface $logger,
23    ) {}
24
25    public function handledMessageClass(): string
26    {
27        return SubscribeTrigger::class;
28    }
29
30    /** @param SubscribeTrigger $message */
31    public function handle(WorkerHandle $handle, WorkerMessage $message): void
32    {
33        $this->registry->add(new BrokerSubscription(
34            subscriptionId: $message->subscriptionId,
35            workerId: $handle->id,
36            scope: $message->scope,
37            kind: SubscriptionKind::Trigger,
38            selector: Selector::exact($message->trigger->getSharingKey()),
39            trigger: $message->trigger,
40        ));
41
42        $handle->send(new SubscriptionAck($message->subscriptionId, true, null));
43
44        $this->logger->debug('Trigger subscription registered', [
45            'app' => $message->scope->wireValue(),
46            'platforms' => $message->trigger->listPlatforms(),
47        ]);
48    }
49}