Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
DiscoveryController
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
2 / 2
3
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 discover
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare(strict_types=1);
4
5use Psr\Http\Message\ResponseInterface as Response;
6use Psr\Http\Message\ServerRequestInterface as Request;
7use UppServices\DiscoveryService;
8
9/**
10 * Slim controller for barcode discovery (Open Food Facts + GS1).
11 */
12class DiscoveryController
13{
14    private readonly DiscoveryService $discoveryService;
15
16    public function __construct(DiscoveryService $discoveryService)
17    {
18        $this->discoveryService = $discoveryService;
19    }
20
21    /**
22     * GET/POST /barcode/discover — lookup product data for a scanned GTIN/EAN.
23     */
24    public function discover(Request $request, Response $response): Response
25    {
26        $queryParams = $request->getQueryParams();
27        $postBody = $request->getBody()->getContents();
28        $result = $this->discoveryService->discover($queryParams, $postBody ?: null);
29        $response->getBody()->write(json_encode($result));
30
31        return $response->withHeader('Content-Type', 'application/json');
32    }
33}