154 lines
4.5 KiB
PHP
154 lines
4.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Filters\Webstream\WebstreamFilters;
|
|
use App\Models\Webstream;
|
|
use App\Services\WebstreamService;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Exception;
|
|
use Throwable;
|
|
|
|
class WebstreamController extends Controller
|
|
{
|
|
|
|
public function __construct(WebstreamService $webstreamService)
|
|
{
|
|
$this->webstreamService = $webstreamService;
|
|
}
|
|
|
|
public function index(WebstreamFilters $filters)
|
|
{
|
|
try {
|
|
if ( ! isset($filters->per_page) || is_null($filters)) {
|
|
$pagination = 20;
|
|
} else {
|
|
$pagination = $filters->per_page;
|
|
}
|
|
|
|
return Webstream::searchFilter($filters)->cursorPaginate($pagination)->toJson();
|
|
} catch (Exception $e) {
|
|
Log::error($e->getMessage());
|
|
|
|
return response()->json(['message' => $e->getMessage()], 500);
|
|
}
|
|
}
|
|
|
|
public function show(Request $request, $webstreamId)
|
|
{
|
|
try {
|
|
$webstream = Webstream::findOrFail($webstreamId);
|
|
|
|
return response()->json($webstream);
|
|
} catch (Exception $e) {
|
|
DB::rollBack();
|
|
Log::error($e->getMessage());
|
|
|
|
return response()->json(['message' => 'Webstream not found: ' . $e->getMessage()], 404);
|
|
}
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
try {
|
|
# Todo length field needs to be validated against a type
|
|
$data = $request->validate([
|
|
'name' => ['required'],
|
|
'description' => ['required'],
|
|
'url' => ['required', 'url'],
|
|
'length' => ['required'],
|
|
]);
|
|
|
|
$isAudioStream = $this->webstreamService->isAudioStream($data['url']);
|
|
|
|
# TODO Permissions
|
|
$data['mtime'] = now();
|
|
$data['utime'] = now();
|
|
$data['creator_id'] = auth()->id();
|
|
|
|
DB::beginTransaction();
|
|
$webstream = Webstream::create($data);
|
|
DB::commit();
|
|
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'message' => 'Webstream saved successfully!',
|
|
'data' => $webstream,
|
|
'isAudioStream' => $isAudioStream
|
|
]);
|
|
} catch (Exception $e) {
|
|
Log::error($e->getMessage());
|
|
DB::rollBack();
|
|
|
|
return response()->json(['message' => $e->getMessage()], 500);
|
|
} catch (Throwable $e) {
|
|
DB::rollBack();
|
|
Log::error($e->getMessage());
|
|
|
|
return response()->json(['message' => $e->getMessage()], 500);
|
|
}
|
|
}
|
|
|
|
public function update(Request $request, Webstream $webstream)
|
|
{
|
|
try {
|
|
$data = $request->validate([
|
|
'name' => ['required'],
|
|
'description' => ['required'],
|
|
'url' => ['required', 'url'],
|
|
]);
|
|
|
|
$isAudioStream = $this->webstreamService->isAudioStream($data['url']);
|
|
|
|
// Update utime to current time
|
|
$data['utime'] = now();
|
|
|
|
DB::beginTransaction();
|
|
$webstream->update($data);
|
|
DB::commit();
|
|
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'message' => 'Webstream updated successfully!',
|
|
'data' => $webstream,
|
|
'isAudioStream' => $isAudioStream
|
|
]);
|
|
} catch (Exception $e) {
|
|
DB::rollBack();
|
|
Log::error($e->getMessage());
|
|
|
|
return response()->json(['message' => $e->getMessage()], 500);
|
|
} catch (Throwable $e) {
|
|
DB::rollBack();
|
|
Log::error($e->getMessage());
|
|
|
|
return response()->json(['message' => $e->getMessage()], 500);
|
|
}
|
|
}
|
|
|
|
public function destroy(Webstream $webstream)
|
|
{
|
|
try {
|
|
DB::beginTransaction();
|
|
$webstream->delete();
|
|
DB::commit();
|
|
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'message' => 'Webstream deleted successfully!'
|
|
]);
|
|
} catch (Exception $e) {
|
|
DB::rollBack();
|
|
Log::error($e->getMessage());
|
|
|
|
return response()->json(['message' => $e->getMessage()], 500);
|
|
} catch (Throwable $e) {
|
|
DB::rollBack();
|
|
Log::error($e->getMessage());
|
|
|
|
return response()->json(['message' => $e->getMessage()], 500);
|
|
}
|
|
}
|
|
}
|