Completed
Push — master ( 058e40...9e132c )
by Valentyn
04:01
created

GenreManageService   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 91.67%

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 5
dl 0
loc 53
ccs 22
cts 24
cp 0.9167
rs 10
c 0
b 0
f 0

5 Methods

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