Skip to content

Commit

Permalink
de-duplicate code in a more comprehensible way
Browse files Browse the repository at this point in the history
  • Loading branch information
mszulik committed Feb 17, 2025
1 parent 1087280 commit d161bc3
Show file tree
Hide file tree
Showing 15 changed files with 370 additions and 211 deletions.
325 changes: 176 additions & 149 deletions .phpstorm.meta.php

Large diffs are not rendered by default.

74 changes: 73 additions & 1 deletion _ide_helper.php
Original file line number Diff line number Diff line change
Expand Up @@ -22391,6 +22391,77 @@ public static function isConfigured()
*
*
*/
class DeliveryFacade {
/**
* Retrieve an original for a version.
*
* @param \App\Models\Version $version
* @return \Illuminate\Contracts\Foundation\Application|\Response|\Illuminate\Contracts\Routing\ResponseFactory
* @static
*/
public static function getOriginal($version)
{
/** @var \App\Classes\Delivery $instance */
return $instance->getOriginal($version);
}

/**
*
*
* @param string $transformations
* @param \App\Models\Version $version
* @param \App\Enums\MediaType $mediaType
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Response
* @static
*/
public static function getDerivative($transformations, $version, $mediaType)
{
/** @var \App\Classes\Delivery $instance */
return $instance->getDerivative($transformations, $version, $mediaType);
}

}
/**
*
*
*/
class OptimizeFacade {
/**
* Optimize an image derivative.
*
* Creates a temporary file since image optimizers only work locally.
*
* @param string $derivative
* @param int|null $quality
* @return string
* @throws Exception
* @static
*/
public static function optimize($derivative, $quality = null)
{
/** @var \App\Classes\Optimizer\Optimize $instance */
return $instance->optimize($derivative, $quality);
}

/**
*
*
* @param string $derivative
* @return string
* @throws Exception
* @static
*/
public static function removePdfMetadata($derivative)
{
/** @var \App\Classes\Optimizer\Optimize $instance */
return $instance->removePdfMetadata($derivative);
}

}
/**
*
*
*/
class TranscodeFacade {
/**
* Returns the class which handles the actual transcoding.
Expand Down Expand Up @@ -22462,7 +22533,6 @@ class TransformFacade {
* @param string $pathToOriginalImage
* @param array|null $transformations
* @return string Binary string of the image.
* @throws FileNotFoundException
* @static
*/
public static function transform($pathToOriginalImage, $transformations = null)
Expand Down Expand Up @@ -28240,6 +28310,8 @@ class Validator extends \Illuminate\Support\Facades\Validator {}
class View extends \Illuminate\Support\Facades\View {}
class Vite extends \Illuminate\Support\Facades\Vite {}
class CdnHelper extends \App\Facades\CdnHelperFacade {}
class Delivery extends \App\Facades\DeliveryFacade {}
class Optimize extends \App\Facades\OptimizeFacade {}
class Transcode extends \App\Facades\TranscodeFacade {}
class Transform extends \App\Facades\TransformFacade {}
class Protector extends \Cybex\Protector\ProtectorFacade {}
Expand Down
8 changes: 4 additions & 4 deletions app/Helpers/DeliveryHelper.php → app/Classes/Delivery.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace App\Helpers;
namespace App\Classes;

use App\Enums\MediaStorage;
use App\Enums\MediaType;
Expand All @@ -13,15 +13,15 @@
use Illuminate\Contracts\Routing\ResponseFactory;
use Illuminate\Http\Response;

class DeliveryHelper
class Delivery
{
/**
* Retrieve an original for a version.
*
* @param Version $version
* @return Application|Response|ResponseFactory
*/
public static function getOriginal(Version $version): Response|Application|ResponseFactory
public function getOriginal(Version $version): Response|Application|ResponseFactory
{
$originalsDisk = MediaStorage::ORIGINALS->getDisk();
$pathToOriginal = $version->originalFilePath();
Expand All @@ -35,7 +35,7 @@ public static function getOriginal(Version $version): Response|Application|Respo
* @param MediaType $mediaType
* @return Application|ResponseFactory|Response
*/
public static function getDerivative(string $transformations, Version $version, MediaType $mediaType): ResponseFactory|Application|Response
public function getDerivative(string $transformations, Version $version, MediaType $mediaType): ResponseFactory|Application|Response
{
try {
$transformationsArray = Transformation::arrayFromString($transformations);
Expand Down
14 changes: 3 additions & 11 deletions app/Classes/MediaHandler/ImageHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@

namespace App\Classes\MediaHandler;

use App\Classes\Optimizer\Optimize;
use App\Enums\ImageFormat;
use App\Enums\MediaStorage;
use App\Enums\MediaType;
use App\Enums\ResponseState;
use App\Enums\Transformation;
use App\Models\Version;
use Illuminate\Contracts\Filesystem\Filesystem;
use Optimize;
use Transform;

class ImageHandler extends AbstractMediaHandler
class ImageHandler extends StaticMediaHandler
{
protected MediaType $type = MediaType::IMAGE;
protected MediaStorage $derivativesStorage = MediaStorage::IMAGE_DERIVATIVES;
protected ResponseState $uploadSuccessful = ResponseState::IMAGE_UPLOAD_SUCCESSFUL;
protected ResponseState $uploadFailed = ResponseState::CDN_INVALIDATION_FAILED;
protected ResponseState $versionSetSuccessful = ResponseState::IMAGE_VERSION_SET;
Expand All @@ -28,14 +28,6 @@ public function getValidationRules(): string
return sprintf('mimes:%s', implode(',', ImageFormat::getFormats()));
}

/**
* @return Filesystem
*/
public function getDerivativesDisk(): Filesystem
{
return MediaStorage::IMAGE_DERIVATIVES->getDisk();
}

/**
* @param Version $version
* @param array|null $transformationsArray
Expand Down
46 changes: 46 additions & 0 deletions app/Classes/MediaHandler/MediaHandler.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

namespace App\Classes\MediaHandler;

use App\Enums\MediaStorage;
use App\Enums\MediaType;
use App\Enums\ResponseState;
use App\Interfaces\MediaHandlerInterface;
use CdnHelper;
use Illuminate\Contracts\Filesystem\Filesystem;
use Throwable;

abstract class MediaHandler implements MediaHandlerInterface
{
protected MediaType $type;
protected MediaStorage $derivativesStorage;
protected ResponseState $uploadSuccessful;
protected ResponseState $uploadFailed;
protected ResponseState $versionSetSuccessful;
protected ResponseState $versionSetFailed;

/**
* @return Filesystem
*/
public function getDerivativesDisk(): Filesystem
{
return $this->derivativesStorage->getDisk();
}

/**
* @param string $basePath
* @return bool
*/
public function invalidateCdnCache(string $basePath): bool
{
if (CdnHelper::isConfigured()) {
try {
CdnHelper::invalidateMedia($this->type, $basePath);
} catch (Throwable) {
return false;
}
}

return true;
}
}
14 changes: 3 additions & 11 deletions app/Classes/MediaHandler/PdfHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@

namespace App\Classes\MediaHandler;

use App\Classes\Optimizer\Optimize;
use App\Enums\MediaStorage;
use App\Enums\MediaType;
use App\Enums\ResponseState;
use App\Enums\Transformation;
use App\Exceptions\PdfPageDoesNotExistException;
use App\Models\Version;
use Illuminate\Contracts\Filesystem\Filesystem;
use Optimize;
use Transform;

class PdfHandler extends AbstractMediaHandler
class PdfHandler extends StaticMediaHandler
{
protected MediaType $type = MediaType::PDF;
protected MediaStorage $derivativesStorage = MediaStorage::PDF_DERIVATIVES;
protected ResponseState $uploadSuccessful = ResponseState::PDF_UPLOAD_SUCCESSFUL;
protected ResponseState $uploadFailed = ResponseState::CDN_INVALIDATION_FAILED;
protected ResponseState $versionSetSuccessful = ResponseState::PDF_VERSION_SET;
Expand All @@ -28,14 +28,6 @@ public function getValidationRules(): string
return 'mimetypes:application/pdf';
}

/**
* @return Filesystem
*/
public function getDerivativesDisk(): Filesystem
{
return MediaStorage::PDF_DERIVATIVES->getDisk();
}

/**
* @param Version $version
* @param array|null $transformationsArray
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,16 @@

namespace App\Classes\MediaHandler;

use App\Enums\MediaType;
use App\Enums\ResponseState;
use App\Interfaces\MediaHandlerInterface;
use App\Models\Media;
use App\Models\UploadSlot;
use App\Models\User;
use App\Models\Version;
use CdnHelper;
use Throwable;

abstract class AbstractMediaHandler implements MediaHandlerInterface
abstract class StaticMediaHandler extends MediaHandler
{
protected MediaType $type;
protected ResponseState $uploadSuccessful;
protected ResponseState $uploadFailed;
protected ResponseState $versionSetSuccessful;
protected ResponseState $versionSetFailed;


public function handleSavedFile(string $basePath, UploadSlot $uploadSlot, Version $version): ResponseState
{
if ($this->invalidateCdnCache($basePath)) {
Expand Down
22 changes: 10 additions & 12 deletions app/Classes/MediaHandler/VideoHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,17 @@
use App\Models\User;
use App\Models\Version;
use BadMethodCallException;
use Illuminate\Contracts\Filesystem\Filesystem;
use Transcode;

class VideoHandler extends AbstractMediaHandler
class VideoHandler extends MediaHandler
{
protected MediaType $type = MediaType::VIDEO;
protected MediaStorage $derivativesStorage = MediaStorage::VIDEO_DERIVATIVES;
protected ResponseState $uploadSuccessful = ResponseState::VIDEO_UPLOAD_SUCCESSFUL;
protected ResponseState $uploadFailed = ResponseState::TRANSCODING_JOB_DISPATCH_FAILED;
protected ResponseState $versionSetSuccessful = ResponseState::VIDEO_VERSION_SET;
protected ResponseState $versionSetFailed = ResponseState::TRANSCODING_JOB_DISPATCH_FAILED;

/**
* @param string $basePath
* @param UploadSlot $uploadSlot
Expand All @@ -29,7 +35,7 @@ public function handleSavedFile(string $basePath, UploadSlot $uploadSlot, Versio
$success = Transcode::createJob($version, $uploadSlot);
\Log::info(sprintf('Transcoding job dispatched with result %s for media %s and version %s.', $success, $version->Media->identifier, $version->getKey()));

return $success ? ResponseState::VIDEO_UPLOAD_SUCCESSFUL : ResponseState::TRANSCODING_JOB_DISPATCH_FAILED;
return $success ? $this->uploadSuccessful : $this->uploadFailed;
}

/**
Expand All @@ -54,22 +60,14 @@ public function setVersion(User $user, Version $version, int $oldVersionNumber,
$uploadSlot = $user->UploadSlots()->withoutGlobalScopes()->updateOrCreate(['identifier' => $version->Media->identifier], ['media_type' => MediaType::VIDEO]);

$success = Transcode::createJobForVersionUpdate($version, $uploadSlot, $oldVersionNumber, $wasProcessed);
$responseState = $success ? ResponseState::VIDEO_VERSION_SET : ResponseState::TRANSCODING_JOB_DISPATCH_FAILED;
$responseState = $success ? $this->versionSetSuccessful : $this->versionSetFailed;

return [
$responseState,
$uploadSlot?->token
];
}

/**
* @return Filesystem
*/
public function getDerivativesDisk(): Filesystem
{
return MediaStorage::VIDEO_DERIVATIVES->getDisk();
}

/**
* @param Media $media
* @return array
Expand Down
10 changes: 5 additions & 5 deletions app/Classes/Optimizer/Optimize.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ class Optimize
* @return string
* @throws Exception
*/
public static function optimize(string $derivative, int $quality = null): string
public function optimize(string $derivative, int $quality = null): string
{
$tempFile = self::getTemporaryFile($derivative);
$tempFile = $this->getTemporaryFile($derivative);

// Optimizes the image based on optimizers configured in 'config/image-optimizer.php'.
ImageFormat::fromMimeType(mime_content_type($tempFile))->getOptimizer()->optimize($tempFile, $quality);
Expand All @@ -40,9 +40,9 @@ public static function optimize(string $derivative, int $quality = null): string
* @return string
* @throws Exception
*/
public static function removePdfMetadata(string $derivative): string
public function removePdfMetadata(string $derivative): string
{
$tempFile = self::getTemporaryFile($derivative);
$tempFile = $this->getTemporaryFile($derivative);
$pdfMerge = new PdfMerge();

try {
Expand All @@ -61,7 +61,7 @@ public static function removePdfMetadata(string $derivative): string
* @param string $derivative
* @return false|string
*/
protected static function getTemporaryFile(string $derivative): string|false
protected function getTemporaryFile(string $derivative): string|false
{
$tempFile = tempnam(sys_get_temp_dir(), 'transmorpher');
file_put_contents($tempFile, $derivative);
Expand Down
18 changes: 18 additions & 0 deletions app/Facades/DeliveryFacade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class DeliveryFacade extends Facade
{
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor(): string
{
return 'delivery';
}
}
Loading

0 comments on commit d161bc3

Please sign in to comment.