Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
5 / 5
CRAP
100.00% covered (success)
100.00%
1 / 1
ExportResourceFile
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
5 / 5
5
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
1
 getName
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getContents
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
1
 getSize
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getMimeType
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2namespace Apie\ApieFileSystem\Virtual;
3
4use Apie\Core\BoundedContext\BoundedContextId;
5use Apie\Core\Context\ApieContext;
6use Apie\Core\ContextConstants;
7use Apie\Core\Datalayers\ApieDatalayer;
8use Apie\Export\EntityExport;
9use Apie\Export\ValueObjects\FileExtension;
10use ReflectionClass;
11use Symfony\Component\Mime\MimeTypes;
12
13class ExportResourceFile implements VirtualFileInterface
14{
15    public function __construct(
16        private readonly ApieContext $context,
17        private readonly ReflectionClass $resourceName,
18        private readonly FileExtension $fileExtension,
19        private readonly EntityExport $exporter,
20    ) {
21    }
22
23    public function getName(): string
24    {
25        return $this->resourceName->getShortName() . '.' . $this->fileExtension->toNative();
26    }
27
28    /**
29     * @return resource
30     */
31    public function getContents(): mixed
32    {
33        $apieDatalayer = $this->context->getContext(ApieDatalayer::class);
34        return $this->exporter->streamFromEntityList(
35            $this->resourceName,
36            $apieDatalayer->all($this->resourceName, new BoundedContextId($this->context->getContext(ContextConstants::BOUNDED_CONTEXT_ID))),
37            $this->context,
38            $this->getName()
39        )->detach();
40    }
41
42    public function getSize(): ?int
43    {
44        return null;
45    }
46
47    public function getMimeType(): string
48    {
49        return MimeTypes::getDefault()
50            ->getMimeTypes($this->fileExtension->toNative())[0] ?? 'application/octet-stream';
51    }
52}