]> git.localhorst.tv Git - alttp.git/blob - app/Http/Controllers/TechniqueController.php
basic map pins
[alttp.git] / app / Http / Controllers / TechniqueController.php
1 <?php
2
3 namespace App\Http\Controllers;
4
5 use App\Models\Technique;
6 use App\Models\TechniqueMap;
7 use Illuminate\Database\Eloquent\Builder;
8 use Illuminate\Http\Request;
9
10 class TechniqueController extends Controller
11 {
12
13         public function forMap($map) {
14                 $techs = TechniqueMap::with(['technique', 'technique.relations'])->where('map', '=', $map);
15
16                 return $techs->get()->toJson();
17         }
18
19         public function search(Request $request) {
20                 $validatedData = $request->validate([
21                         'phrase' => 'string|nullable',
22                         'ruleset' => 'array|nullable',
23                         'ruleset.competitive' => 'boolean',
24                         'ruleset.mg' => 'boolean',
25                         'ruleset.nl' => 'boolean',
26                         'ruleset.owg' => 'boolean',
27                         'type' => 'string|nullable',
28                 ]);
29
30                 $techs = Technique::where('index', '=', 1);
31
32                 if (!empty($validatedData['type'])) {
33                         $techs = $techs->where('type', '=', $validatedData['type']);
34                 }
35
36                 if (!empty($validatedData['phrase'])) {
37                         $search = $validatedData['phrase'];
38                         $techs = $techs->where(function (Builder $query) use ($search) {
39                                 $query->where('title', 'LIKE', '%'.$search.'%')
40                                 ->orWhere('short', 'LIKE', '%'.$search.'%');
41                         });
42                 }
43
44                 if (isset($validatedData['ruleset'])) {
45                         $com = isset($validatedData['ruleset']['competitive']) && $validatedData['ruleset']['competitive'];
46                         $owg = isset($validatedData['ruleset']['owg']) && $validatedData['ruleset']['owg'];
47                         $mg = isset($validatedData['ruleset']['mg']) && $validatedData['ruleset']['mg'];
48                         $nl = isset($validatedData['ruleset']['nl']) && $validatedData['ruleset']['nl'];
49                         $any = $com || $owg || $mg || $nl;
50                         $all = $com && $owg && $mg && $nl;
51                         if ($any && !$all) {
52                                 $techs->where(function(Builder $query) use ($com, $owg, $mg, $nl) {
53                                         $query->whereNull('rulesets');
54                                         if ($com) {
55                                                 $query->orWhere('rulesets->competitive', '=', true);
56                                         }
57                                         if ($owg) {
58                                                 $query->orWhere('rulesets->owg', '=', true);
59                                         }
60                                         if ($mg) {
61                                                 $query->orWhere('rulesets->mg', '=', true);
62                                         }
63                                         if ($nl) {
64                                                 $query->orWhere('rulesets->nl', '=', true);
65                                         }
66                                 });
67                         }
68                 }
69
70                 return $techs->get()->toJson();
71         }
72
73         public function single(Request $request, Technique $tech) {
74                 $this->authorize('view', $tech);
75                 $tech->load(['chapters', 'relations']);
76                 return $tech->toJson();
77         }
78
79 }