Completed
Push — master ( 321b0a...c0c467 )
by Valentyn
22:27
created

UserRecommendationTransformer::process()   B

Complexity

Conditions 7
Paths 25

Size

Total Lines 24

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 13
CRAP Score 7

Importance

Changes 0
Metric Value
dl 0
loc 24
ccs 13
cts 13
cp 1
rs 8.6026
c 0
b 0
f 0
cc 7
nc 25
nop 1
crap 7
1
<?php
2
3
namespace App\Movies\Transformer;
4
5
use App\Transformer\Transformer;
6
7
class UserRecommendationTransformer implements Transformer
8
{
9
    private $hiddenFields = [];
10
    /**
11
     * [int movie id => int how many times this movie were recommended]
12
     * @var array
13
     */
14
    private $idToTimesRecommendedMap = [];
15
16 2
    public static function list(array $ids): self
17
    {
18 2
        $transformer = new self();
19 2
        $transformer->hiddenFields = [
20
            'budget',
21
            'genres',
22
            'imdbId',
23
            'overview',
24
            'runtime',
25
            'tmdb.id',
26
            'tmdb.voteAverage',
27
            'tmdb.voteCount',
28
        ];
29
30 2
        foreach ($ids as $data) {
31 2
            $transformer->idToTimesRecommendedMap[reset($data)] = $data['rate'];
32
        }
33
34 2
        return $transformer;
35
    }
36
37 2
    public function process(array $data): array
38
    {
39 2
        if (!isset($data['id'])) {
40 2
            return $data;
41
        }
42
43 2
        $data['isWatched'] = isset($data['userWatchedMovie']) && $data['userWatchedMovie'] ? true : false;
44
45 2
        if (isset($data['tmdb.id'])) {
46 2
            $data['tmdb']['id'] = $data['tmdb.id'];
47 2
            $data['tmdb']['voteAverage'] = $data['tmdb.voteAverage'];
48 2
            $data['tmdb']['voteCount'] = $data['tmdb.voteCount'];
49
50 2
            $data['rate'] = $this->idToTimesRecommendedMap[$data['id']] ?? 0;
51
        }
52
53 2
        foreach ($this->hiddenFields as $hiddenField) {
54 2
            if (isset($data[$hiddenField])) {
55 2
                unset($data[$hiddenField]);
56
            }
57
        }
58
59 2
        return $data;
60
    }
61
}