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