Files
Galeria/app/Http/Controllers/SongController.php
2025-03-31 16:50:45 -03:00

98 lines
2.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Models\Song;
use Illuminate\Support\Facades\Storage;
use Inertia\Inertia;
use Inertia\Response;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class SongController extends Controller
{ use AuthorizesRequests;
public function index(Request $request): Response
{
return Inertia::render('Songs/Index', [
'songs' => Song::where('user_id', auth()->id())->paginate(10),
]);
}
public function store(Request $request): JsonResponse
{
Gate::authorize("create", Song::class);
$validated = $request->validate([
'song' => 'max:108826630',
]);
$song = new Song();
$song->user_id = auth()->id();
$file = $request->song;
$path = $file->store('songs');
$song->title = $file->getClientOriginalName();
$song->path = $path;
$song->artist = $file->getClientOriginalName();
$ret = $song->save();
return response()->json([
'data' => $ret ? "Guardado " . $song->title : 'sin archivo'
]);
}
/**
* @return void
* @param mixed $id
*/
public function update(Request $request, $id):void
{
// Update specified song
}
/**
* @param int $id
*/
public function destroy($id)
{
$song = Song::find($id);
$user = User::find(auth()->id());
//Gate::authorize('delete', $user , $song);
$this->authorize('delete', $song);
if ($song) {
// Delete the related file
if (Storage::exists($song->path)) {
Storage::delete($song->path);
}
Song::destroy($id);
}
return response()->noContent(200);
}
/**
* @param int $id
*/
public function stream($id)
{
$song = Song::find($id);
// Stream specified song
$this->authorize('view', $song);
if ($song && Storage::exists($song->path)) {
$file = Storage::path($song->path);
return response()->stream(function () use ($file) {
$stream = fopen($file, 'rb');
fpassthru($stream);
fclose($stream);
}, 200, [
'Content-Type' => 'audio/mpeg',
'Content-Disposition' => 'inline; filename="' . $file . '"',
'Accept-Ranges' => 'bytes',
]);
}
}
}