Passed
Push — master ( 055b76...bacc0b )
by Patrick
01:33 queued 12s
created

Producer::sendMessages()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 15
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 2
eloc 11
c 1
b 0
f 1
nc 2
nop 2
dl 0
loc 15
ccs 0
cts 11
cp 0
crap 6
rs 9.9
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of forecast.it.fill project.
7
 * (c) Patrick Jaja <[email protected]>
8
 * This source file is subject to the MIT license that is bundled
9
 * with this source code in the file LICENSE.
10
 */
11
12
namespace ForecastAutomation\AmqpClient\Business;
13
14
use DateTimeImmutable;
15
use Enqueue\AmqpExt\AmqpContext;
16
use ForecastAutomation\Log\LogFacade;
17
use ForecastAutomation\QueueClient\Shared\Dto\MessageCollectionDto;
18
use ForecastAutomation\QueueClient\Shared\Plugin\QueuePluginCollection;
19
use ForecastAutomation\Serializer\SerializerFacade;
20
use Monolog\Processor\UidProcessor;
21
22
class Producer
23
{
24
    public function __construct(
25
        private AmqpContext $context,
26
        private QueuePluginCollection $queuePluginCollection,
27
        private SerializerFacade $serializerFacade,
28
        private LogFacade $logFacade
29
    ) {
30
    }
31
32
    public function sendMessages(string $queueName, MessageCollectionDto $messageCollectionDto): void
33
    {
34
        $queue = $this->context->createQueue($this->queuePluginCollection->offsetGet($queueName)->getQueueName());
35
        $this->context->declareQueue($queue);
36
37
        foreach ($messageCollectionDto->messageDtos as $messageDto) {
38
            $messageDto
39
                ->setId((new UidProcessor(32))->getUid())
40
                ->setTime((new DateTimeImmutable())->getTimestamp())
41
                ->setQueueName($queueName)
42
            ;
43
            $msg = $this->serializerFacade->serialize($messageDto);
44
            $message = $this->context->createMessage($msg);
45
            $this->logFacade->info('Publishing AMQP Message.', ['queue_message' => $msg]);
46
            $this->context->createProducer()->send($queue, $message);
47
        }
48
    }
49
}
50