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

UserEventHandler   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 85
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 11

Test Coverage

Coverage 100%

Importance

Changes 7
Bugs 3 Features 1
Metric Value
wmc 7
c 7
b 3
f 1
lcom 1
cbo 11
dl 0
loc 85
ccs 27
cts 27
cp 1
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 12 1
B handle() 0 31 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