Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
RegisterUserController
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
2 / 2
4
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
 register
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2
3declare(strict_types=1);
4
5namespace App\Identity\Infrastructure\Controllers;
6
7use App\Identity\Application\Command\RegisterUserCommand;
8use App\Identity\Application\Command\RegisterUserHandler;
9use App\Identity\Domain\Exceptions\EmailAlreadyInUse;
10use App\Shared\Infrastructure\Http\ReadsJsonPayload;
11use InvalidArgumentException;
12use OpenApi\Attributes as OA;
13use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
14use Symfony\Component\HttpFoundation\JsonResponse;
15use Symfony\Component\HttpFoundation\Request;
16use Symfony\Component\Routing\Attribute\Route;
17
18#[OA\Tag(name: 'Users')]
19class RegisterUserController extends AbstractController
20{
21    use ReadsJsonPayload;
22
23    public function __construct(
24        private readonly RegisterUserHandler $handler,
25    ) {
26    }
27
28    #[Route('/users', name: 'users_register', methods: ['POST'])]
29    public function register(Request $request): JsonResponse
30    {
31        try {
32            $payload = $this->decodeJsonBody($request);
33
34            $userId = $this->handler->handle(new RegisterUserCommand(
35                email: $this->stringField($payload, 'email'),
36                plainPassword: $this->stringField($payload, 'password'),
37                preferredCurrency: $this->stringField($payload, 'preferredCurrency'),
38                name: $this->stringField($payload, 'name'),
39                surnames: $this->stringField($payload, 'surnames'),
40                birthDate: $this->stringField($payload, 'birthDate'),
41            ));
42        } catch (EmailAlreadyInUse $e) {
43            return new JsonResponse(['error' => $e->getMessage()], 409);
44        } catch (InvalidArgumentException $e) {
45            return new JsonResponse(['error' => $e->getMessage()], 400);
46        }
47
48        return new JsonResponse(['id' => $userId->value()], 201);
49    }
50}