Completed
Push — feature/VSVGVQ-20 ( 30ada6...30ada6 )
by steven
02:59
created

UserController::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 2
1
<?php declare(strict_types=1);
2
3
namespace VSV\GVQ_API\User\Controllers;
4
5
use Symfony\Component\HttpFoundation\Request;
6
use Symfony\Component\HttpFoundation\Response;
7
use VSV\GVQ_API\User\Models\LoginDetails;
8
use VSV\GVQ_API\User\Models\User;
9
use VSV\GVQ_API\User\Repositories\UserRepository;
10
use VSV\GVQ_API\User\Serializers\UserSerializer;
11
12
class UserController
13
{
14
    /**
15
     * @var UserRepository
16
     */
17
    private $userRepository;
18
19
    /**
20
     * @var UserSerializer
21
     */
22
    private $userSerializer;
23
24
    /**
25
     * @param UserRepository $userRepository
26
     * @param UserSerializer $userSerializer
27
     */
28
    public function __construct(UserRepository $userRepository, UserSerializer $userSerializer)
29
    {
30
        $this->userRepository = $userRepository;
31
        $this->userSerializer = $userSerializer;
32
    }
33
34
    /**
35
     * @param Request $request
36
     * @return Response
37
     */
38
    public function save(Request $request): Response
39
    {
40
        $json = $request->getContent();
41
        /** @var User $user */
42
        $user = $this->userSerializer->deserialize($json, User::class, 'json');
43
        $this->userRepository->save($user);
44
45
        $response = new Response('{"id":"'.$user->getId()->toString().'"}');
46
        $response->headers->set('Content-Type', 'application/json');
47
48
        return $response;
49
    }
50
51
    /**
52
     * @param Request $request
53
     * @return Response
54
     */
55
    public function login(Request $request): Response
56
    {
57
        $json = $request->getContent();
58
        $loginDetails = new LoginDetails(json_decode($json, true));
59
        $user = $this->userRepository->getByEmail($loginDetails->getEmail());
60
        if ($user === null) {
61
            throw new \InvalidArgumentException('No user found');
62
        }
63
        if ($user->getPassword()->verifies($loginDetails->getPassword())) {
64
            $response =  new Response(
65
                $this->userSerializer->serialize($user, 'json')
66
            );
67
        } else {
68
            $response = new Response('{"id":"null"}');
69
        }
70
        $response->headers->set('Content-Type', 'application/json');
71
72
        return $response;
73
    }
74
}
75