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); } } }