feat(BE): webstream
This commit is contained in:
parent
42dcde7fc9
commit
ebe6b72efe
10 changed files with 387 additions and 75 deletions
154
app/Http/Controllers/WebstreamController.php
Normal file
154
app/Http/Controllers/WebstreamController.php
Normal file
|
@ -0,0 +1,154 @@
|
|||
<?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);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue