Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
26 / 26
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
NickController
100.00% covered (success)
100.00%
26 / 26
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
2 / 2
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
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 __invoke
100.00% covered (success)
100.00%
25 / 25
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace App\Controller;
4
5use App\Application\UseCase\GenerateNickInterface;
6use App\Dto\Command\GenerateNickCommand;
7use App\Dto\Request\RandomNickRequest;
8use App\Dto\Request\RequestFromQuery;
9use App\Dto\Response\NickDto;
10use App\Dto\Response\NickWordDto;
11use App\Dto\Result\FormattedNickWord;
12use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
13use Symfony\Component\HttpFoundation\JsonResponse;
14use Symfony\Component\HttpFoundation\Response;
15use Symfony\Component\Routing\Attribute\Route;
16
17/**
18 * @author Wilhelm Zwertvaegher
19 */
20#[Route('/api/nick')]
21class NickController extends AbstractController
22{
23    public function __construct(private readonly GenerateNickInterface $generateNick)
24    {
25    }
26
27    #[Route('', name: 'api_nick', methods: ['GET'])]
28    public function __invoke(#[RequestFromQuery] RandomNickRequest $request): JsonResponse
29    {
30        $generateNickCommand = new GenerateNickCommand(
31            $request->getLang(),
32            $request->getGender(),
33            $request->getOffenseLevel(),
34            $request->getPreviousNickId(),
35            $request->getReplaceRoleType(),
36            $request->getExclusions()
37        );
38        $generatedNickData = ($this->generateNick)($generateNickCommand);
39
40        return $this->json(
41            new NickDto(
42                $generatedNickData->getNick()->getId(),
43                $generatedNickData->getTargetGender(),
44                $generatedNickData->getTargetOffenseLevel(),
45                array_map(
46                    fn (FormattedNickWord $word) => new NickWordDto(
47                        $word->id,
48                        $word->label,
49                        $word->type
50                    ),
51                    $generatedNickData->getWords()
52                )
53            ),
54            Response::HTTP_OK
55        );
56    }
57}