Completed
Push — master ( 670f0c...07e238 )
by Pavel
12:30
created

UpdateController::patchAction()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 15
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 2.0054

Importance

Changes 0
Metric Value
dl 0
loc 15
ccs 8
cts 9
cp 0.8889
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 9
nc 2
nop 2
crap 2.0054
1
<?php
2
3
namespace ScayTrase\Api\Cruds\Controller;
4
5
use Doctrine\Common\Persistence\ObjectManager;
6
use Doctrine\Common\Persistence\ObjectRepository;
7
use ScayTrase\Api\Cruds\EntityProcessorInterface;
8
use ScayTrase\Api\Cruds\Event\CollectionCrudEvent;
9
use ScayTrase\Api\Cruds\Event\CrudEvents;
10
use ScayTrase\Api\Cruds\Exception\EntityNotFoundException;
11
use Symfony\Component\EventDispatcher\EventDispatcher;
12
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
13
14
final class UpdateController
15
{
16
    const ACTION = 'patchAction';
17
18
    /** @var  ObjectManager */
19
    private $manager;
20
    /** @var  EventDispatcherInterface */
21
    private $evm;
22
    /** @var  ObjectRepository */
23
    private $repository;
24
    /** @var  EntityProcessorInterface */
25
    private $processor;
26
27
    /**
28
     * UpdateController constructor.
29
     *
30
     * @param ObjectRepository         $repository
31
     * @param EntityProcessorInterface $processor
32
     * @param ObjectManager            $manager
33
     * @param EventDispatcherInterface $evm
34
     */
35 4
    public function __construct(
36
        ObjectRepository $repository,
37
        EntityProcessorInterface $processor,
38
        ObjectManager $manager,
39
        EventDispatcherInterface $evm = null
40
    ) {
41 4
        $this->manager    = $manager;
42 4
        $this->repository = $repository;
43 4
        $this->processor  = $processor;
44 4
        $this->evm        = $evm ?: new EventDispatcher();
45 4
    }
46
47
    /**
48
     * @param mixed $identifier
49
     * @param mixed $data
50
     *
51
     * @return object
52
     * @throws EntityNotFoundException
53
     */
54 4
    public function patchAction($identifier, $data)
55
    {
56 4
        $entity = $this->repository->find($identifier);
57
58 4
        if (!$entity) {
59
            throw EntityNotFoundException::byIdentifier($identifier);
60
        }
61
62 4
        $this->evm->dispatch(CrudEvents::PRE_UPDATE, new CollectionCrudEvent([$entity]));
63 4
        $entity = $this->processor->updateEntity($entity, $data);
64 4
        $this->evm->dispatch(CrudEvents::POST_UPDATE, new CollectionCrudEvent([$entity]));
65 4
        $this->manager->flush();
66
67 4
        return $entity;
68
    }
69
}
70