Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
ListDocumentTypesAction
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
2 / 2
2
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
 __invoke
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace App\Action\Document\Type;
6
7use App\Domain\Document\Type\Repository\DocumentTypeRepository;
8use App\Renderer\JsonRenderer;
9use Psr\Http\Message\ResponseInterface;
10use Psr\Http\Message\ServerRequestInterface;
11
12/**
13 * Authenticated catalog read for the upload form's type dropdown.
14 *
15 * Returns only active types so the UI never offers a retired form.
16 * Same payload shape is consumed by the admin review surface in PR3.
17 */
18final readonly class ListDocumentTypesAction
19{
20    public function __construct(
21        private DocumentTypeRepository $repository,
22        private JsonRenderer $renderer,
23    ) {}
24
25    public function __invoke(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface
26    {
27        $types = $this->repository->findActive();
28
29        return $this->renderer->json($response, [
30            'success' => true,
31            'data' => [
32                'types' => array_map(static fn($type) => $type->toArray(), $types),
33            ],
34        ]);
35    }
36}