create filesystem abstraction
This commit is contained in:
parent
be2c51bfb7
commit
d59d444952
14 changed files with 44 additions and 64 deletions
|
|
@ -17,7 +17,7 @@ use App\Element\UseCases\UpdateElement\UpdateElement;
|
||||||
use App\Element\UseCases\UpdateElement\UpdateElementRequest;
|
use App\Element\UseCases\UpdateElement\UpdateElementRequest;
|
||||||
use App\Exceptions\BadRequestException;
|
use App\Exceptions\BadRequestException;
|
||||||
use App\Exceptions\NotFoundException;
|
use App\Exceptions\NotFoundException;
|
||||||
use App\Shared\Files\FileUploader;
|
use App\Shared\Files\Filesystem;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Response;
|
use Illuminate\Http\Response;
|
||||||
|
|
@ -32,7 +32,7 @@ class ElementController
|
||||||
private ReorderChildElements $reorderChildElements,
|
private ReorderChildElements $reorderChildElements,
|
||||||
private UpdateElement $updateElement,
|
private UpdateElement $updateElement,
|
||||||
private GetElementPdf $getElementPdf,
|
private GetElementPdf $getElementPdf,
|
||||||
private FileUploader $fileUploader,
|
private Filesystem $filesystem,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -400,7 +400,7 @@ class ElementController
|
||||||
}
|
}
|
||||||
|
|
||||||
if (str_starts_with($path, $folderPrefix)) {
|
if (str_starts_with($path, $folderPrefix)) {
|
||||||
return $this->fileUploader->url($path);
|
return $this->filesystem->url($path);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $path;
|
return $path;
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,13 @@ use App\Element\Element;
|
||||||
use App\Element\ElementRepository;
|
use App\Element\ElementRepository;
|
||||||
use App\Exceptions\BadRequestException;
|
use App\Exceptions\BadRequestException;
|
||||||
use App\Exceptions\NotFoundException;
|
use App\Exceptions\NotFoundException;
|
||||||
use App\Shared\Files\FileUploader;
|
use App\Shared\Files\Filesystem;
|
||||||
|
|
||||||
class DeleteChildElement
|
class DeleteChildElement
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private ElementRepository $elementRepository,
|
private ElementRepository $elementRepository,
|
||||||
private FileUploader $fileUploader,
|
private Filesystem $filesystem,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -78,6 +78,6 @@ class DeleteChildElement
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->fileUploader->delete($path);
|
$this->filesystem->delete($path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
namespace App\Element\UseCases\GetElementPdf;
|
namespace App\Element\UseCases\GetElementPdf;
|
||||||
|
|
||||||
use App\Exceptions\NotFoundException;
|
use App\Exceptions\NotFoundException;
|
||||||
use App\Shared\Files\StoredFileReader;
|
use App\Shared\Files\Filesystem;
|
||||||
|
|
||||||
class GetElementPdf
|
class GetElementPdf
|
||||||
{
|
{
|
||||||
|
|
@ -11,7 +11,7 @@ class GetElementPdf
|
||||||
|
|
||||||
private const PDF_MIME_TYPE = 'application/pdf';
|
private const PDF_MIME_TYPE = 'application/pdf';
|
||||||
|
|
||||||
public function __construct(private StoredFileReader $storedFileReader)
|
public function __construct(private Filesystem $filesystem)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -29,7 +29,7 @@ class GetElementPdf
|
||||||
}
|
}
|
||||||
|
|
||||||
$path = "element-pdfs/$request->folder/$request->fileName";
|
$path = "element-pdfs/$request->folder/$request->fileName";
|
||||||
$contents = $this->storedFileReader->read($path);
|
$contents = $this->filesystem->read($path);
|
||||||
if ($contents === null) {
|
if ($contents === null) {
|
||||||
throw new NotFoundException('PDF not found');
|
throw new NotFoundException('PDF not found');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use App\Element\ElementRepository;
|
||||||
use App\Exceptions\BadRequestException;
|
use App\Exceptions\BadRequestException;
|
||||||
use App\Exceptions\NotFoundException;
|
use App\Exceptions\NotFoundException;
|
||||||
use App\Shared\Files\FileToUpload;
|
use App\Shared\Files\FileToUpload;
|
||||||
use App\Shared\Files\FileUploader;
|
use App\Shared\Files\Filesystem;
|
||||||
|
|
||||||
class UpdateIconImage
|
class UpdateIconImage
|
||||||
{
|
{
|
||||||
|
|
@ -21,7 +21,7 @@ class UpdateIconImage
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private ElementRepository $elementRepository,
|
private ElementRepository $elementRepository,
|
||||||
private FileUploader $fileUploader,
|
private Filesystem $filesystem,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -73,7 +73,7 @@ class UpdateIconImage
|
||||||
mimeType: $request->fileMimeType,
|
mimeType: $request->fileMimeType,
|
||||||
sizeBytes: $request->fileSizeBytes,
|
sizeBytes: $request->fileSizeBytes,
|
||||||
);
|
);
|
||||||
$path = $this->fileUploader->upload($iconImage, 'element-icons');
|
$path = $this->filesystem->upload($iconImage, 'element-icons');
|
||||||
$element->setIconImageUrl($path);
|
$element->setIconImageUrl($path);
|
||||||
|
|
||||||
return $this->elementRepository->update($element);
|
return $this->elementRepository->update($element);
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,13 @@ use App\Element\Element;
|
||||||
use App\Element\ElementRepository;
|
use App\Element\ElementRepository;
|
||||||
use App\Exceptions\BadRequestException;
|
use App\Exceptions\BadRequestException;
|
||||||
use App\Exceptions\NotFoundException;
|
use App\Exceptions\NotFoundException;
|
||||||
use App\Shared\Files\FileUploader;
|
use App\Shared\Files\Filesystem;
|
||||||
|
|
||||||
class UpdateIconImageUrl
|
class UpdateIconImageUrl
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private ElementRepository $elementRepository,
|
private ElementRepository $elementRepository,
|
||||||
private FileUploader $fileUploader,
|
private Filesystem $filesystem,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -60,6 +60,6 @@ class UpdateIconImageUrl
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->fileUploader->delete($path);
|
$this->filesystem->delete($path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use App\Element\ElementRepository;
|
||||||
use App\Exceptions\BadRequestException;
|
use App\Exceptions\BadRequestException;
|
||||||
use App\Exceptions\NotFoundException;
|
use App\Exceptions\NotFoundException;
|
||||||
use App\Shared\Files\FileToUpload;
|
use App\Shared\Files\FileToUpload;
|
||||||
use App\Shared\Files\FileUploader;
|
use App\Shared\Files\Filesystem;
|
||||||
|
|
||||||
class UpdateLongPdf
|
class UpdateLongPdf
|
||||||
{
|
{
|
||||||
|
|
@ -19,7 +19,7 @@ class UpdateLongPdf
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private ElementRepository $elementRepository,
|
private ElementRepository $elementRepository,
|
||||||
private FileUploader $fileUploader,
|
private Filesystem $filesystem,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -67,7 +67,7 @@ class UpdateLongPdf
|
||||||
mimeType: $request->fileMimeType,
|
mimeType: $request->fileMimeType,
|
||||||
sizeBytes: $request->fileSizeBytes,
|
sizeBytes: $request->fileSizeBytes,
|
||||||
);
|
);
|
||||||
$path = $this->fileUploader->upload($pdf, 'element-pdfs/long');
|
$path = $this->filesystem->upload($pdf, 'element-pdfs/long');
|
||||||
$element->setLongPdfPath($path);
|
$element->setLongPdfPath($path);
|
||||||
|
|
||||||
return $this->elementRepository->update($element);
|
return $this->elementRepository->update($element);
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,13 @@ use App\Element\Element;
|
||||||
use App\Element\ElementRepository;
|
use App\Element\ElementRepository;
|
||||||
use App\Exceptions\BadRequestException;
|
use App\Exceptions\BadRequestException;
|
||||||
use App\Exceptions\NotFoundException;
|
use App\Exceptions\NotFoundException;
|
||||||
use App\Shared\Files\FileUploader;
|
use App\Shared\Files\Filesystem;
|
||||||
|
|
||||||
class UpdateLongPdfPath
|
class UpdateLongPdfPath
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private ElementRepository $elementRepository,
|
private ElementRepository $elementRepository,
|
||||||
private FileUploader $fileUploader,
|
private Filesystem $filesystem,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -60,6 +60,6 @@ class UpdateLongPdfPath
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->fileUploader->delete($path);
|
$this->filesystem->delete($path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use App\Element\ElementRepository;
|
||||||
use App\Exceptions\BadRequestException;
|
use App\Exceptions\BadRequestException;
|
||||||
use App\Exceptions\NotFoundException;
|
use App\Exceptions\NotFoundException;
|
||||||
use App\Shared\Files\FileToUpload;
|
use App\Shared\Files\FileToUpload;
|
||||||
use App\Shared\Files\FileUploader;
|
use App\Shared\Files\Filesystem;
|
||||||
|
|
||||||
class UpdateShortPdf
|
class UpdateShortPdf
|
||||||
{
|
{
|
||||||
|
|
@ -19,7 +19,7 @@ class UpdateShortPdf
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private ElementRepository $elementRepository,
|
private ElementRepository $elementRepository,
|
||||||
private FileUploader $fileUploader,
|
private Filesystem $filesystem,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -67,7 +67,7 @@ class UpdateShortPdf
|
||||||
mimeType: $request->fileMimeType,
|
mimeType: $request->fileMimeType,
|
||||||
sizeBytes: $request->fileSizeBytes,
|
sizeBytes: $request->fileSizeBytes,
|
||||||
);
|
);
|
||||||
$path = $this->fileUploader->upload($pdf, 'element-pdfs/short');
|
$path = $this->filesystem->upload($pdf, 'element-pdfs/short');
|
||||||
$element->setShortPdfPath($path);
|
$element->setShortPdfPath($path);
|
||||||
|
|
||||||
return $this->elementRepository->update($element);
|
return $this->elementRepository->update($element);
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,13 @@ use App\Element\Element;
|
||||||
use App\Element\ElementRepository;
|
use App\Element\ElementRepository;
|
||||||
use App\Exceptions\BadRequestException;
|
use App\Exceptions\BadRequestException;
|
||||||
use App\Exceptions\NotFoundException;
|
use App\Exceptions\NotFoundException;
|
||||||
use App\Shared\Files\FileUploader;
|
use App\Shared\Files\Filesystem;
|
||||||
|
|
||||||
class UpdateShortPdfPath
|
class UpdateShortPdfPath
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private ElementRepository $elementRepository,
|
private ElementRepository $elementRepository,
|
||||||
private FileUploader $fileUploader,
|
private Filesystem $filesystem,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -60,6 +60,6 @@ class UpdateShortPdfPath
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->fileUploader->delete($path);
|
$this->filesystem->delete($path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,8 @@ use App\Auth\PasswordHasher;
|
||||||
use App\Auth\RandomTokenGenerator;
|
use App\Auth\RandomTokenGenerator;
|
||||||
use App\Auth\SystemClock;
|
use App\Auth\SystemClock;
|
||||||
use App\Auth\TokenGenerator;
|
use App\Auth\TokenGenerator;
|
||||||
use App\Shared\Files\FileUploader;
|
use App\Shared\Files\Filesystem;
|
||||||
use App\Shared\Files\LaravelFileUploader;
|
use App\Shared\Files\LaravelFilesystem;
|
||||||
use App\Shared\Files\LaravelStoredFileReader;
|
|
||||||
use App\Shared\Files\StoredFileReader;
|
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
class AppServiceProvider extends ServiceProvider
|
class AppServiceProvider extends ServiceProvider
|
||||||
|
|
@ -31,12 +29,8 @@ class AppServiceProvider extends ServiceProvider
|
||||||
SystemClock::class,
|
SystemClock::class,
|
||||||
);
|
);
|
||||||
$this->app->bind(
|
$this->app->bind(
|
||||||
FileUploader::class,
|
Filesystem::class,
|
||||||
LaravelFileUploader::class,
|
LaravelFilesystem::class,
|
||||||
);
|
|
||||||
$this->app->bind(
|
|
||||||
StoredFileReader::class,
|
|
||||||
LaravelStoredFileReader::class,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,13 @@
|
||||||
|
|
||||||
namespace App\Shared\Files;
|
namespace App\Shared\Files;
|
||||||
|
|
||||||
interface FileUploader
|
interface Filesystem
|
||||||
{
|
{
|
||||||
public function upload(FileToUpload $file, string $folder): string;
|
public function upload(FileToUpload $file, string $folder): string;
|
||||||
|
|
||||||
public function url(string $path): string;
|
public function url(string $path): string;
|
||||||
|
|
||||||
public function delete(string $path): void;
|
public function delete(string $path): void;
|
||||||
|
|
||||||
|
public function read(string $path): ?string;
|
||||||
}
|
}
|
||||||
|
|
@ -5,7 +5,7 @@ namespace App\Shared\Files;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
class LaravelFileUploader implements FileUploader
|
class LaravelFilesystem implements Filesystem
|
||||||
{
|
{
|
||||||
public function upload(FileToUpload $file, string $folder): string
|
public function upload(FileToUpload $file, string $folder): string
|
||||||
{
|
{
|
||||||
|
|
@ -25,6 +25,15 @@ class LaravelFileUploader implements FileUploader
|
||||||
Storage::disk('public')->delete($path);
|
Storage::disk('public')->delete($path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function read(string $path): ?string
|
||||||
|
{
|
||||||
|
if (!Storage::disk('public')->exists($path)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Storage::disk('public')->get($path);
|
||||||
|
}
|
||||||
|
|
||||||
private function extensionFor(FileToUpload $file): string
|
private function extensionFor(FileToUpload $file): string
|
||||||
{
|
{
|
||||||
$mimeExtensions = [
|
$mimeExtensions = [
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Shared\Files;
|
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Storage;
|
|
||||||
|
|
||||||
class LaravelStoredFileReader implements StoredFileReader
|
|
||||||
{
|
|
||||||
public function read(string $path): ?string
|
|
||||||
{
|
|
||||||
if (!Storage::disk('public')->exists($path)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Storage::disk('public')->get($path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Shared\Files;
|
|
||||||
|
|
||||||
interface StoredFileReader
|
|
||||||
{
|
|
||||||
public function read(string $path): ?string;
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue