Completed
Pull Request — master (#21)
by Valentyn
01:42
created

GenreManageService::createGenreByRequest()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
crap 1
1
<?php
2
declare(strict_types=1);
3
4
namespace App\Service\Genre;
5
6
use App\Entity\Genre;
7
use App\Entity\Translations\GenreTranslations;
8
use App\Request\Genre\CreateGenreRequest;
9
use App\Request\Genre\UpdateGenreRequest;
10
use App\Translation\TranslatedEntityHelper;
11
use Doctrine\ORM\EntityManagerInterface;
12
13
class GenreManageService
14
{
15
    private $translatedEntityHelper;
16
    private $entityManager;
17
18 3
    public function __construct(TranslatedEntityHelper $translatedEntityHelper, EntityManagerInterface $entityManager)
19
    {
20 3
        $this->translatedEntityHelper = $translatedEntityHelper;
21 3
        $this->entityManager = $entityManager;
22 3
    }
23
24 2
    public function createGenreByRequest(CreateGenreRequest $request): Genre
25
    {
26 2
        return $this->createGenre($request->get('genre')['translations']);
27
    }
28
29 1
    public function updateGenreByRequest(UpdateGenreRequest $request, Genre $genre): Genre
30
    {
31 1
        return $this->updateGenre($genre, $request->get('genre')['translations']);
32
    }
33
34 2
    public function createGenre(array $translations): Genre
35
    {
36 2
        $genre = new Genre();
37
38 2
        $addTranslation = function ($translation) use ($genre) {
39 2
            $genre->addTranslation(
40 2
                new GenreTranslations($genre, $translation['locale'], $translation['name'])
41
            );
42 2
        };
43
44 2
        $this->translatedEntityHelper->updateTranslations($genre, $translations, $addTranslation);
45 2
        $this->entityManager->persist($genre);
46
47 2
        return $genre;
48
    }
49
50
    public function updateGenre(Genre $genre, array $translations): Genre
51
    {
52 1
        $addTranslation = function (array $translation) use ($genre) {
53
            $genre->addTranslation(
54
                new GenreTranslations($genre, $translation['locale'], $translation['name'])
55
            );
56 1
        };
57
58 1
        $updateTranslation = function (array $translation, GenreTranslations $oldTranslation) {
59 1
            $oldTranslation->changeName($translation['name']);
60 1
        };
61
62 1
        $this->translatedEntityHelper->updateTranslations($genre, $translations, $addTranslation, $updateTranslation);
63 1
        $this->entityManager->persist($genre);
64
65 1
        return $genre;
66
    }
67
}