3 namespace App\Http\Controllers;
5 use App\Models\Episode;
7 use Illuminate\Http\Request;
9 class EpisodeController extends Controller
12 public function search(Request $request) {
13 $validatedData = $request->validate([
14 'after' => 'nullable|date',
15 'before' => 'nullable|date',
16 'event' => 'nullable|array',
17 'event.*' => 'numeric',
19 $after = isset($validatedData['after']) ? $validatedData['after'] : Carbon::now()->sub(2, 'hours');
20 $before = isset($validatedData['before']) ? $validatedData['before'] : Carbon::now()->add(1, 'days');
21 $episodes = Episode::with(['channels', 'event', 'players', 'players.user'])
22 ->select('episodes.*')
23 ->join('events', 'episodes.event_id', '=', 'events.id')
24 ->where('episodes.confirmed', '=', true)
25 ->where('episodes.start', '>=', $after)
26 ->where('episodes.start', '<=', $before)
27 ->where('events.visible', '=', true)
28 ->orderBy('episodes.start')
30 if (!empty($validatedData['event'])) {
31 $episodes = $episodes->whereIn('episodes.event_id', $validatedData['event']);
33 if ($request->user() && $request->user()->isPrivileged()) {
34 $episodes = $episodes->with(['crew', 'crew.user']);
36 $episodes = $episodes->with([
37 'crew' => function ($query) {
38 $query->where('confirmed', true);
43 return $episodes->get()->toJson();
46 public function single(Request $request, Episode $episode) {
47 $this->authorize('view', $episode);
48 return $episode->toJson();