UploadMediaHandler   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 40
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 20
dl 0
loc 40
rs 10
c 0
b 0
f 0
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A __invoke() 0 23 4
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Damax\Media\Application\Command;
6
7
use Damax\Common\Domain\Model\Metadata;
8
use Damax\Media\Application\Exception\MediaNotFound;
9
use Damax\Media\Application\Exception\MediaUploadFailure;
10
use Damax\Media\Domain\Metadata\Reader;
11
use Damax\Media\Domain\Model\MediaRepository;
12
use Damax\Media\Domain\Storage\Storage;
13
use Throwable;
14
15
final class UploadMediaHandler
16
{
17
    private $repository;
18
    private $storage;
19
    private $metadata;
20
21
    public function __construct(MediaRepository $repository, Storage $storage, Reader $metadata)
22
    {
23
        $this->repository = $repository;
24
        $this->storage = $storage;
25
        $this->metadata = $metadata;
26
    }
27
28
    /**
29
     * @throws MediaNotFound
30
     * @throws MediaUploadFailure
31
     */
32
    public function __invoke(UploadMedia $command): void
33
    {
34
        $mediaId = $command->mediaId();
35
36
        if (null === $media = $this->repository->byId($mediaId)) {
37
            throw MediaNotFound::byId($mediaId);
38
        }
39
40
        if ($this->metadata->supports($command->upload())) {
41
            $metadata = $this->metadata->extract($command->upload());
42
        } else {
43
            $metadata = Metadata::create();
44
        }
45
46
        try {
47
            $file = $this->storage->write($media, $command->upload());
48
49
            $media->upload($file, $metadata);
50
        } catch (Throwable $e) {
51
            throw new MediaUploadFailure('Upload failed.');
52
        }
53
54
        $this->repository->update($media);
55
    }
56
}
57