<?php
namespace App\Jobs;
use App\Models\Song;
use App\Models\User;
use App\Repositories\AlbumRepository;
use App\Repositories\SongRepository;
use App\Responses\SongUploadResponse;
use App\Services\UploadService;
class HandleSongUploadJob extends QueuedJob
{
public function __construct(public readonly string $filePath, public readonly User $uploader)
{
}
public function handle(
UploadService $uploadService,
SongRepository $songRepository,
AlbumRepository $albumRepository,
): Song {
$song = $uploadService->handleUpload($this->filePath, $this->uploader);
$populatedSong = $songRepository->getOne($song->id, $this->uploader);
$album = $albumRepository->getOne($populatedSong->album_id, $this->uploader);
broadcast(SongUploadResponse::make(song: $populatedSong, album: $album));
return $song;
}
}