Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
91.67% covered (success)
91.67%
11 / 12
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
LogisticsObjectEndpoint
91.67% covered (success)
91.67%
11 / 12
0.00% covered (danger)
0.00%
0 / 1
7.03
0.00% covered (danger)
0.00%
0 / 1
 handle
91.67% covered (success)
91.67%
11 / 12
0.00% covered (danger)
0.00%
0 / 1
7.03
1<?php
2
3declare(strict_types=1);
4
5namespace LambdaTwelve\OneRecord\Server\Endpoint;
6
7use LambdaTwelve\OneRecord\Server\Http\HttpException;
8use LambdaTwelve\OneRecord\Server\Http\Negotiated;
9use LambdaTwelve\OneRecord\Server\Spi\Action;
10use LambdaTwelve\OneRecord\Server\Spi\Agent;
11use Psr\Http\Message\ResponseInterface;
12use Psr\Http\Message\ServerRequestInterface;
13
14/**
15 * GET and HEAD /logistics-objects/{id}: the latest version, a historical one
16 * with ?at=, with linked objects embedded on ?embedded=true.
17 */
18final class LogisticsObjectEndpoint extends AbstractEndpoint
19{
20    public function handle(ServerRequestInterface $request, Agent $agent, Negotiated $negotiated, array $parameters): ResponseInterface
21    {
22        $query = self::query($request);
23        $atParameter = isset($query['at']) && trim($query['at']) !== '' ? trim($query['at']) : null;
24        $at = null;
25        if ($atParameter !== null) {
26            $at = self::parseAt($atParameter);
27            if ($at > $this->services->clock->now()) {
28                throw HttpException::invalidQuery('The at parameter must be in the past.', 'at');
29            }
30        }
31        $embedded = isset($query['embedded']) && \in_array(strtolower($query['embedded']), ['true', '1'], true);
32
33        $stored = $this->requireObject($parameters['id'], $agent, Action::ReadLogisticsObject, at: $at);
34        $location = $stored->object->iri->value . ($atParameter !== null ? '?at=' . $atParameter : '');
35        $document = $this->writeObject($stored, $agent, $embedded, $atParameter);
36
37        return $this->services->responder->jsonLd(200, $document, $negotiated, $this->objectHeaders($stored, $location)['Type'] ?? null, $this->objectHeaders($stored, $location), self::isHead($request));
38    }
39}