Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
RequestLoggingMiddleware
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 2
12
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 process
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3declare(strict_types=1);
4
5namespace BO\Zmscitizenapi\Middleware;
6
7use BO\Zmscitizenapi\Services\Core\LoggerService;
8use Psr\Http\Message\ResponseInterface;
9use Psr\Http\Message\ServerRequestInterface;
10use Psr\Http\Server\MiddlewareInterface;
11use Psr\Http\Server\RequestHandlerInterface;
12
13/**
14 * Middleware for logging HTTP requests and responses
15 */
16class RequestLoggingMiddleware implements MiddlewareInterface
17{
18    private LoggerService $logger;
19/**
20     * @param LoggerService $logger Service for logging requests and responses
21     */
22    public function __construct(LoggerService $logger)
23    {
24        $this->logger = $logger;
25    }
26
27    /**
28     * Process an incoming server request and log its details
29     *
30     * @param ServerRequestInterface $request The request to process
31     * @param RequestHandlerInterface $handler The handler to process the request
32     * @return ResponseInterface The resulting response
33     * @throws \Throwable If an error occurs during request handling
34     */
35    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
36    {
37        try {
38            $response = $handler->handle($request);
39            $responseToLog = clone $response;
40            $responseToLog->getBody()->rewind();
41            $this->logger->logRequest($request, $responseToLog);
42            return $response;
43        } catch (\Throwable $e) {
44            $this->logger->logError($e, $request);
45            throw $e;
46        }
47    }
48}