X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=app%2FHttp%2FControllers%2FTechniqueController.php;h=b27465e5da1afe0819198cc88338e7f23ce80282;hb=f17b9f3b6f7f9e678c681c719eea6fb5c41a387f;hp=a1ba20e59ac214877b46d815bcd6084d150a7df0;hpb=6c51a1601e74bc822ccafe984d525d0e9a35ca28;p=alttp.git diff --git a/app/Http/Controllers/TechniqueController.php b/app/Http/Controllers/TechniqueController.php index a1ba20e..b27465e 100644 --- a/app/Http/Controllers/TechniqueController.php +++ b/app/Http/Controllers/TechniqueController.php @@ -3,19 +3,36 @@ 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', ]); $techs = Technique::where('index', '=', 1); + if (!empty($validatedData['type'])) { + $techs = $techs->where('type', '=', $validatedData['type']); + } + if (!empty($validatedData['phrase'])) { $search = $validatedData['phrase']; $techs = $techs->where(function (Builder $query) use ($search) { @@ -24,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(); }