]> git.localhorst.tv Git - alttp.git/blobdiff - app/Http/Controllers/EpisodeController.php
basic channel crew
[alttp.git] / app / Http / Controllers / EpisodeController.php
index d1e7e85612d08c7c1417fdda2df2f07f4a0bbaef..1a407a184e97039738e4b3743f888fec05a3f924 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers;
 
+use App\Models\Channel;
 use App\Models\Episode;
 use Carbon\Carbon;
 use Illuminate\Http\Request;
@@ -9,10 +10,46 @@ use Illuminate\Http\Request;
 class EpisodeController extends Controller
 {
 
+       public function addRestream(Request $request, Episode $episode) {
+               $this->authorize('addRestream', $episode);
+               $validatedData = $request->validate([
+                       'channel_id' => 'numeric|exists:App\Models\Channel,id',
+               ]);
+
+               $channel = Channel::find($validatedData['channel_id']);
+               $this->authorize('addEpisode', $channel);
+
+               foreach ($episode->channels as $c) {
+                       if ($c->id == $channel->id) {
+                               throw new \Exception('channel already exists on episode');
+                       }
+               }
+
+               $episode->channels()->attach($channel);
+
+               return $episode->load('channels')->toJson();
+       }
+
+       public function removeRestream(Request $request, Episode $episode) {
+               $this->authorize('removeRestream', $episode);
+               $validatedData = $request->validate([
+                       'channel_id' => 'numeric|exists:App\Models\Channel,id',
+               ]);
+
+               $channel = Channel::find($validatedData['channel_id']);
+               $this->authorize('removeEpisode', $channel);
+
+               $episode->channels()->detach($channel);
+
+               return $episode->load('channels')->toJson();
+       }
+
        public function search(Request $request) {
                $validatedData = $request->validate([
                        'after' => 'nullable|date',
                        'before' => 'nullable|date',
+                       'event' => 'nullable|array',
+                       'event.*' => 'numeric',
                ]);
                $after = isset($validatedData['after']) ? $validatedData['after'] : Carbon::now()->sub(2, 'hours');
                $before = isset($validatedData['before']) ? $validatedData['before'] : Carbon::now()->add(1, 'days');
@@ -25,6 +62,9 @@ class EpisodeController extends Controller
                        ->where('events.visible', '=', true)
                        ->orderBy('episodes.start')
                        ->limit(1000);
+               if (!empty($validatedData['event'])) {
+                       $episodes = $episodes->whereIn('episodes.event_id', $validatedData['event']);
+               }
                if ($request->user() && $request->user()->isPrivileged()) {
                        $episodes = $episodes->with(['crew', 'crew.user']);
                } else {