Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
87.50% covered (warning)
87.50%
7 / 8
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
LogisticsEventEndpoint
87.50% covered (warning)
87.50%
7 / 8
0.00% covered (danger)
0.00%
0 / 1
3.02
0.00% covered (danger)
0.00%
0 / 1
 handle
87.50% covered (warning)
87.50%
7 / 8
0.00% covered (danger)
0.00%
0 / 1
3.02
1<?php
2
3declare(strict_types=1);
4
5namespace LambdaTwelve\OneRecord\Server\Endpoint;
6
7use LambdaTwelve\OneRecord\JsonLd\Context;
8use LambdaTwelve\OneRecord\Server\Http\HttpException;
9use LambdaTwelve\OneRecord\Server\Http\Negotiated;
10use LambdaTwelve\OneRecord\Server\Http\Responder;
11use LambdaTwelve\OneRecord\Server\Spi\Action;
12use LambdaTwelve\OneRecord\Server\Spi\Agent;
13use LambdaTwelve\OneRecord\Vocabulary\Generated\Cargo;
14use Psr\Http\Message\ResponseInterface;
15use Psr\Http\Message\ServerRequestInterface;
16
17/**
18 * GET /logistics-objects/{id}/logistics-events/{eventId}: one event. Access
19 * follows GET_LOGISTICS_EVENT on the object.
20 */
21final class LogisticsEventEndpoint extends AbstractEndpoint
22{
23    public function handle(ServerRequestInterface $request, Agent $agent, Negotiated $negotiated, array $parameters): ResponseInterface
24    {
25        $stored = $this->requireObject($parameters['id'], $agent, Action::ReadLogisticsEvent);
26        $eventIri = $this->services->config->logisticsEventIri($parameters['id'], $parameters['eventId']);
27        $event = $this->services->events->get($eventIri);
28        if ($event === null || !$event->logisticsObject->equals($stored->object->iri)) {
29            throw HttpException::notFound('Logistics Event', $eventIri->value);
30        }
31        $context = Context::oneRecord();
32        $type = $this->services->vocabulary->mostSpecific($event->types())[0] ?? Cargo::LogisticsEvent;
33
34        return $this->services->responder->jsonLd(200, $event->toJsonLd($context), $negotiated, $type, ['Location' => $eventIri->value, 'Last-Modified' => Responder::httpDate($event->created)], self::isHead($request));
35    }
36}