Completed
Push — master ( 0b8956...401cdf )
by Rémi
02:42
created

UserEventHandler::handle()   B

Complexity

Conditions 6
Paths 5

Size

Total Lines 31
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 20
CRAP Score 6

Importance

Changes 6
Bugs 2 Features 1
Metric Value
c 6
b 2
f 1
dl 0
loc 31
ccs 20
cts 20
cp 1
rs 8.439
cc 6
eloc 16
nc 5
nop 2
crap 6
1
<?php
2
3
namespace MessageApp\Listener;
4
5
use League\Event\EventInterface;
6
use MessageApp\Event\UserEvent;
7
use MessageApp\Finder\MessageFinder;
8
use MessageApp\Message\DefaultMessage;
9
use MessageApp\Message\MessageFactory;
10
use MessageApp\Message\Sender\MessageSender;
11
use MessageApp\User\Finder\AppUserFinder;
12
use Psr\Log\LoggerAwareInterface;
13
use Psr\Log\LoggerAwareTrait;
14
use Psr\Log\NullLogger;
15
use RemiSan\Context\Context;
16
17
class UserEventHandler implements MessageEventHandler, LoggerAwareInterface
18
{
19
    use LoggerAwareTrait;
20
21
    /**
22
     * @var AppUserFinder
23
     */
24
    private $userFinder;
25
26
    /**
27
     * @var MessageFinder
28
     */
29
    private $messageFinder;
30
31
    /**
32
     * @var MessageFactory
33
     */
34
    private $messageFactory;
35
36
    /**
37
     * @var MessageSender
38
     */
39
    private $messageSender;
40
41
    /**
42
     * Constructor
43
     *
44
     * @param AppUserFinder $userFinder
45
     * @param MessageFinder $messageFinder
46
     * @param MessageFactory $messageFactory
47
     * @param MessageSender $messageSender
48
     */
49 12
    public function __construct(
50
        AppUserFinder $userFinder,
51
        MessageFinder $messageFinder,
52
        MessageFactory $messageFactory,
53
        MessageSender $messageSender
54
    ) {
55 12
        $this->userFinder = $userFinder;
56 12
        $this->messageFinder = $messageFinder;
57 12
        $this->messageFactory = $messageFactory;
58 12
        $this->messageSender = $messageSender;
59 12
        $this->logger = new NullLogger();
60 12
    }
61
62
    /**
63
     * Handle an event.
64
     *
65
     * @param EventInterface $event
66
     * @param Context        $context
67
     *
68
     * @return void
69
     */
70 12
    public function handle(EventInterface $event, Context $context = null)
71
    {
72 12
        if (!($event instanceof UserEvent && $event->getUserId())) {
73 6
            return;
74
        }
75
76
        // Build message
77 6
        $user = $this->userFinder->find($event->getUserId());
78
79 6
        $this->logger->info(
80 6
            'Send message',
81
            [
82 6
                'user' => $user->getName(),
83 6
                'type' => $event->getName()
84 4
            ]
85 4
        );
86
87 6
        $messageContext = null;
88 6
        if ($context) {
89 6
            $messageContext = $this->messageFinder->findByReference($context->getValue());
90 4
        }
91
92 6
        $message = $this->messageFactory->buildMessage([$user], $event);
93
94 6
        if (!$message) {
95 3
            $this->logger->warning('Message could not be generated');
96 3
            return;
97
        }
98
99 3
        $this->messageSender->send($message, ($messageContext) ? $messageContext->getSource() : null);
100 3
    }
101
}
102