Passed
Push — master ( f137da...c4f5b9 )
by Petr
03:20
created

UserService::createOrUpdateUser()   B

Complexity

Conditions 2
Paths 2

Size

Total Lines 28
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 14
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 28
ccs 14
cts 14
cp 1
rs 8.8571
c 0
b 0
f 0
cc 2
eloc 19
nc 2
nop 1
crap 2
1
<?php
2
3
namespace AppBundle\Service;
4
5
use AppBundle\Entity\Repository\UserRepository;
6
use AppBundle\Entity\User;
7
use AppBundle\Service\Vkontakte\AccessToken;
8
use AppBundle\Service\Vkontakte\VkontakteClient;
9
10
/**
11
 * @author Vehsamrak
12
 */
13
class UserService
14
{
15
16
    /** @var UserRepository */
17
    private $userRepository;
18
19
    /** @var VkontakteClient */
20
    private $vkontakteClient;
21
22 2
    public function __construct(
23
        VkontakteClient $vkontakteClient,
24
        UserRepository $userRepository
25
    )
26
    {
27 2
        $this->userRepository = $userRepository;
28 2
        $this->vkontakteClient = $vkontakteClient;
29 2
    }
30
31 2
    public function createOrUpdateUser(AccessToken $vkToken): User
32
    {
33 2
        $userVkId = $vkToken->getUserVkontakteId();
34 2
        $user = $this->userRepository->findUserByVkId($userVkId);
35 2
        $vkTokenHash = $vkToken->getVkontakteTokenHash();
36
37 2
        if ($user) {
38 1
            $user->updateToken();
39 1
            $user->setVkToken($vkTokenHash);
40
        } else {
41 1
            $id = HashGenerator::generate();
42 1
            $name = $this->vkontakteClient->getUserName($vkTokenHash);
43
44 1
            $user = new User(
45
                $id,
46
                $name,
47
                $userVkId,
48
                $vkTokenHash,
49 1
                $vkToken->userEmail
50
            );
51
52 1
            $this->userRepository->persist($user);
53
        }
54
55 2
        $this->userRepository->flush($user);
56
57 2
        return $user;
58
    }
59
}
60