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

PeriodicalActivityDataImportProcess::start()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 7
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 13
ccs 0
cts 7
cp 0
crap 2
rs 10
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\PeriodicalActivityDataImport\Business;
13
14
use ForecastAutomation\Activity\Shared\Dto\ActivityDto;
15
use ForecastAutomation\Activity\Shared\Dto\ActivityDtoCollection;
16
use ForecastAutomation\ForecastClient\Shared\Config\ForecastClientQueueConstants;
17
use ForecastAutomation\PeriodicalActivityDataImport\Shared\Dto\PeriodicalActivityConfigDto;
18
use ForecastAutomation\QueueClient\QueueClientFacade;
19
use ForecastAutomation\QueueClient\Shared\Dto\MessageCollectionDto;
20
use ForecastAutomation\QueueClient\Shared\Dto\MessageDto;
21
22
class PeriodicalActivityDataImportProcess
23
{
24
    public const PERIODICAL_SUFFIX = 'Geplanter Termin';
25
26
    public function __construct(
27
        private PeriodicalActivityConfigReader $periodicalActivityConfigReader,
28
        private QueueClientFacade $queueClientFacade
29
    ) {
30
    }
31
32
    public function start(string $periodicalDate): int
33
    {
34
        $activityDtoCollection = $this->generateActivity(
35
            $this->periodicalActivityConfigReader->readPeriodicalConfig($periodicalDate),
36
            $periodicalDate
37
        );
38
39
        $this->queueClientFacade->sendMessages(
40
            ForecastClientQueueConstants::QUEUE_NAME,
41
            $this->createMessageCollectionDto($activityDtoCollection)
42
        );
43
44
        return \count($activityDtoCollection->activityDtos);
45
    }
46
47
    private function createMessageCollectionDto(ActivityDtoCollection $activityDtoCollection): MessageCollectionDto
48
    {
49
        $messages = [];
50
        foreach ($activityDtoCollection as $activityDto) {
51
            $messages[] =
52
                new MessageDto(
53
                    ['created' => $activityDto->created->format('c')] + (array) $activityDto,
54
                    ForecastClientQueueConstants::QUEUE_NAME,
55
                    ForecastClientQueueConstants::IMPORT_EVENT
56
                );
57
        }
58
59
        return new MessageCollectionDto(...$messages);
60
    }
61
62
    private function generateActivity(
63
        array $periodicalConfigDtoCollection,
64
        string $periodicalDate
65
    ): ActivityDtoCollection {
66
        $activityDtoArray = [];
67
        /** @var PeriodicalActivityConfigDto $periodicalConfigDto */
68
        foreach ($periodicalConfigDtoCollection as $periodicalConfigDto) {
69
            $activityDtoArray[] = new ActivityDto(
70
                $periodicalConfigDto->project_id,
71
                sprintf('%s: %s', self::PERIODICAL_SUFFIX, $periodicalConfigDto->note),
72
                new \DateTime(date('d-m-Y', strtotime($periodicalDate))),
73
                $periodicalConfigDto->duration
74
            );
75
        }
76
77
        return new ActivityDtoCollection(...$activityDtoArray);
78
    }
79
}
80