]> git.localhorst.tv Git - alttp.git/blob - app/Http/Controllers/EpisodeController.php
schedule event filter
[alttp.git] / app / Http / Controllers / EpisodeController.php
1 <?php
2
3 namespace App\Http\Controllers;
4
5 use App\Models\Episode;
6 use Carbon\Carbon;
7 use Illuminate\Http\Request;
8
9 class EpisodeController extends Controller
10 {
11
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',
18                 ]);
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')
29                         ->limit(1000);
30                 if (!empty($validatedData['event'])) {
31                         $episodes = $episodes->whereIn('episodes.event_id', $validatedData['event']);
32                 }
33                 if ($request->user() && $request->user()->isPrivileged()) {
34                         $episodes = $episodes->with(['crew', 'crew.user']);
35                 } else {
36                         $episodes = $episodes->with([
37                                 'crew' => function ($query) {
38                                         $query->where('confirmed', true);
39                                 },
40                                 'crew.user',
41                         ]);
42                 }
43                 return $episodes->get()->toJson();
44         }
45
46         public function single(Request $request, Episode $episode) {
47                 $this->authorize('view', $episode);
48                 return $episode->toJson();
49         }
50
51 }