Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
18 / 18
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
DefaultStoredFileService
100.00% covered (success)
100.00%
18 / 18
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
3 / 3
4
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 replace
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
 delete
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace App\Shared\Domain\Service;
4
5use App\Shared\Domain\Model\EntityId;
6use App\Shared\Domain\Model\StoredFile;
7use App\Shared\Domain\Model\TempFile;
8use App\Shared\Domain\Port\Driven\FileStorageService;
9use App\Shared\Domain\Port\Driven\StoredFileRepository;
10
11/**
12 * @author Wilhelm Zwertvaegher
13 */
14readonly class DefaultStoredFileService implements StoredFileService
15{
16
17    public function __construct(
18        private StoredFileRepository $storedFileRepository,
19        private FileStorageService  $fileStorage,
20    ) {
21    }
22
23    public function replace(?StoredFile $storedFile, TempFile $tempFile, string $fileType): StoredFile
24    {
25        if ($storedFile) {
26            $this->fileStorage->delete($storedFile);
27            $this->storedFileRepository->delete($storedFile);
28        }
29
30        $storedTempFile = $this->fileStorage->store($tempFile, $fileType);
31        $storedFile = new StoredFile(
32            EntityId::generate(),
33            $storedTempFile->getPath(),
34            $storedTempFile->getOriginalFilename(),
35            $storedTempFile->getMime(),
36            $storedTempFile->getExtension(),
37            $fileType,
38            new \DateTimeImmutable()
39        );
40
41        $this->storedFileRepository->save($storedFile);
42        return $storedFile;
43    }
44
45    public function delete(StoredFile $storedFile): void
46    {
47        $this->fileStorage->delete($storedFile);
48        $this->storedFileRepository->delete($storedFile);
49    }
50}