<?php
namespace App\Services\Transcoding;
use App\Enums\SongStorageType;
use App\Helpers\Ulid;
use App\Models\Song;
use App\Services\SongStorages\SftpStorage;
use Illuminate\Support\Facades\File;
class SftpTranscodingStrategy extends TranscodingStrategy
{
public function getTranscodeLocation(Song $song, int $bitRate): string
{
$transcode = $this->findTranscodeBySongAndBitRate($song, $bitRate);
if ($transcode?->isValid()) {
return $transcode->location;
}
if ($transcode) {
File::delete($transcode->location);
}
$storage = app(SftpStorage::class);
$tmpSource = $storage->copyToLocal($song->storage_metadata->getPath());
$destination = artifact_path(sprintf('transcodes/%d/%s.m4a', $bitRate, Ulid::generate()));
$this->transcoder->transcode($tmpSource, $destination, $bitRate);
$this->createOrUpdateTranscode(
$song,
$destination,
$bitRate,
File::hash($destination),
File::size($destination),
);
File::delete($tmpSource);
return $destination;
}
public function deleteTranscodeFile(string $location, SongStorageType $storageType): void
{
$storage = app(SftpStorage::class);
$storage->deleteFileUnderPath(path: $location, backup: false);
}
}