LoggerQueryBusMiddleware   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Importance

Changes 0
Metric Value
wmc 7
lcom 0
cbo 2
dl 0
loc 66
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A __invoke() 0 18 3
A preQueryLog() 0 4 1
A postQueryLog() 0 4 1
A logException() 0 4 1
1
<?php
2
3
namespace NilPortugues\MessageBus\QueryBus;
4
5
use Exception;
6
use NilPortugues\MessageBus\QueryBus\Contracts\Query;
7
use NilPortugues\MessageBus\QueryBus\Contracts\QueryBusMiddleware as QueryBusMiddlewareInterface;
8
use NilPortugues\MessageBus\QueryBus\Contracts\QueryResponse;
9
use Psr\Log\LoggerInterface;
10
11
class LoggerQueryBusMiddleware implements QueryBusMiddlewareInterface
12
{
13
    /** @var LoggerInterface */
14
    protected $logger;
15
16
    /**
17
     * LoggerQueryBus constructor.
18
     *
19
     * @param LoggerInterface $logger
20
     */
21
    public function __construct(LoggerInterface $logger)
22
    {
23
        $this->logger = $logger;
24
    }
25
26
    /**
27
     * @param Query         $query
28
     * @param callable|null $next
29
     *
30
     * @return QueryResponse
31
     *
32
     * @throws Exception
33
     */
34
    public function __invoke(Query $query, callable $next = null) : QueryResponse
35
    {
36
        $response = EmptyResponse::create();
37
38
        try {
39
            if (null !== $next) {
40
                $this->preQueryLog($query);
41
                $response = $next($query);
42
                $this->postQueryLog($query);
43
44
                return $response;
45
            }
46
        } catch (Exception $e) {
47
            $this->logException($e);
48
        }
49
50
        return $response;
51
    }
52
53
    /**
54
     * @param Query $query
55
     */
56
    protected function preQueryLog(Query $query)
57
    {
58
        $this->logger->info(sprintf('Starting %s handling.', get_class($query)));
59
    }
60
61
    /**
62
     * @param Query $query
63
     */
64
    protected function postQueryLog(Query $query)
65
    {
66
        $this->logger->info(sprintf('%s was handled successfully.', get_class($query)));
67
    }
68
69
    /**
70
     * @param Exception $e
71
     */
72
    protected function logException(Exception $e)
73
    {
74
        $this->logger->alert(sprintf('[%s:%s] %s', $e->getFile(), $e->getLine(), $e->getMessage()));
75
    }
76
}
77