]> git.localhorst.tv Git - alttp.git/blob - app/Http/Controllers/EventController.php
events overview
[alttp.git] / app / Http / Controllers / EventController.php
1 <?php
2
3 namespace App\Http\Controllers;
4
5 use App\Models\Event;
6 use Carbon\Carbon;
7 use Illuminate\Http\Request;
8
9 class EventController extends Controller
10 {
11
12         public function search(Request $request) {
13                 $validatedData = $request->validate([
14                         'after' => 'nullable|date',
15                         'before' => 'nullable|date',
16                         'order' => 'nullable|string',
17                         'with' => 'nullable|array',
18                         'with.*' => 'string',
19                 ]);
20                 $events = Event::where('visible', '=', true);
21                 if (isset($validatedData['before'])) {
22                         $events = $events->where(function ($query) use ($validatedData) {
23                                 $query->whereNull('start');
24                                 $query->orWhere('start', '<', $validatedData['before']);
25                         });
26                 }
27                 if (isset($validatedData['after'])) {
28                         $events = $events->where(function ($query) use ($validatedData) {
29                                 $query->whereNull('end');
30                                 $query->orWhere('end', '>', $validatedData['after']);
31                         });
32                 }
33                 if (isset($validatedData['order'])) {
34                         switch ($validatedData['order']) {
35                                 case 'recency':
36                                         $events->orderByRaw('start IS NOT NULL');
37                                         $events->orderByRaw('end IS NOT NULL');
38                                         $events->orderBy('end', 'DESC');
39                                         $events->orderBy('start', 'DESC');
40                                         $events->orderBy('name', 'ASC');
41                                         break;
42                         }
43                 }
44                 if (isset($validatedData['with'])) {
45                         if (in_array('description', $validatedData['with'])) {
46                                 $events->with('description');
47                         }
48                 }
49                 return $events->get()->toJson();
50         }
51
52         public function single(Request $request, Event $event) {
53                 $this->authorize('view', $event);
54                 $event->load('description');
55                 return $event->toJson();
56         }
57
58 }