PlanManager::findByType()   B
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 24
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 3

Importance

Changes 2
Bugs 0 Features 1
Metric Value
c 2
b 0
f 1
dl 0
loc 24
rs 8.9713
ccs 18
cts 18
cp 1
cc 3
eloc 16
nc 3
nop 3
crap 3
1
<?php
2
3
namespace Cp\Manager;
4
5
use Cp\DomainObject\Plan;
6
use Cp\Exception\ConfigurationNotFoundException;
7
use Cp\Parser\PlanParser;
8
use Cp\Transformer\UrlTransformer;
9
use Doctrine\Common\Cache\MemcachedCache;
10
use JMS\Serializer\Serializer;
11
12
/**
13
 * Class PlanManager
14
 */
15
class PlanManager
16
{
17
    /**
18
     * @var PlanParser
19
     */
20
    private $planParser;
21
22
    /**
23
     * @var UrlTransformer
24
     */
25
    private $urlTransformer;
26
27
    /**
28
     * @var Serializer
29
     */
30
    private $serializer;
31
32
    /**
33
     * @var MemcachedCache
34
     */
35
    private $memcache;
36
37
    /**
38
     * TrainingManager constructor.
39
     *
40
     * @param PlanParser     $planParser
41
     * @param UrlTransformer $urlTransformer
42
     * @param Serializer     $serializer
43
     * @param MemcachedCache $memcached
44
     */
45 2
    public function __construct(
46
        PlanParser $planParser,
47
        UrlTransformer $urlTransformer,
48
        Serializer $serializer,
49
        MemcachedCache $memcached
50
    ) {
51 2
        $this->planParser = $planParser;
52 2
        $this->urlTransformer = $urlTransformer;
53 2
        $this->serializer = $serializer;
54 2
        $this->memcache = $memcached;
55 2
    }
56
57
    /**
58
     * @param string $typeName
59
     * @param int    $week
60
     * @param int    $seance
61
     *
62
     * @return Plan
63
     * @throws ConfigurationNotFoundException
64
     */
65 2
    public function findByType($typeName, $week, $seance)
66
    {
67 2
        $plan = $this->memcache->fetch($week.$seance.$typeName);
68 2
        if (false === $plan) {
69
            try {
70 2
                $jsonString = $this->planParser->parseToJson(
71 2
                    $this->urlTransformer->transformPlan($week, $seance, $typeName)
72 2
                );
73 2
            } catch (\Exception $e) {
74 1
                throw new ConfigurationNotFoundException(
75 1
                    sprintf(
76 1
                        'Configuration with week: %s, seance: %s and type:%s is not available',
77 1
                        $week,
78 1
                        $seance,
79
                        $typeName
80 1
                    )
81 1
                );
82
            }
83 1
            $plan = $this->serializer->deserialize($jsonString, Plan::class, 'json');
84 1
            $this->memcache->save($week.$seance.$typeName, $plan, 3600);
85 1
        }
86
87 1
        return $plan;
88
    }
89
}
90