]> git.localhorst.tv Git - alttp.git/blobdiff - app/Http/Controllers/TechniqueController.php
basic map pins
[alttp.git] / app / Http / Controllers / TechniqueController.php
index 268c3f6abeff765568efd68209edc79942363c81..b27465e5da1afe0819198cc88338e7f23ce80282 100644 (file)
@@ -3,15 +3,27 @@
 namespace App\Http\Controllers;
 
 use App\Models\Technique;
+use App\Models\TechniqueMap;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Http\Request;
 
 class TechniqueController extends Controller
 {
 
+       public function forMap($map) {
+               $techs = TechniqueMap::with(['technique', 'technique.relations'])->where('map', '=', $map);
+
+               return $techs->get()->toJson();
+       }
+
        public function search(Request $request) {
                $validatedData = $request->validate([
                        'phrase' => 'string|nullable',
+                       'ruleset' => 'array|nullable',
+                       'ruleset.competitive' => 'boolean',
+                       'ruleset.mg' => 'boolean',
+                       'ruleset.nl' => 'boolean',
+                       'ruleset.owg' => 'boolean',
                        'type' => 'string|nullable',
                ]);
 
@@ -29,12 +41,38 @@ class TechniqueController extends Controller
                        });
                }
 
+               if (isset($validatedData['ruleset'])) {
+                       $com = isset($validatedData['ruleset']['competitive']) && $validatedData['ruleset']['competitive'];
+                       $owg = isset($validatedData['ruleset']['owg']) && $validatedData['ruleset']['owg'];
+                       $mg = isset($validatedData['ruleset']['mg']) && $validatedData['ruleset']['mg'];
+                       $nl = isset($validatedData['ruleset']['nl']) && $validatedData['ruleset']['nl'];
+                       $any = $com || $owg || $mg || $nl;
+                       $all = $com && $owg && $mg && $nl;
+                       if ($any && !$all) {
+                               $techs->where(function(Builder $query) use ($com, $owg, $mg, $nl) {
+                                       $query->whereNull('rulesets');
+                                       if ($com) {
+                                               $query->orWhere('rulesets->competitive', '=', true);
+                                       }
+                                       if ($owg) {
+                                               $query->orWhere('rulesets->owg', '=', true);
+                                       }
+                                       if ($mg) {
+                                               $query->orWhere('rulesets->mg', '=', true);
+                                       }
+                                       if ($nl) {
+                                               $query->orWhere('rulesets->nl', '=', true);
+                                       }
+                               });
+                       }
+               }
+
                return $techs->get()->toJson();
        }
 
        public function single(Request $request, Technique $tech) {
                $this->authorize('view', $tech);
-               $tech->load('chapters');
+               $tech->load(['chapters', 'relations']);
                return $tech->toJson();
        }