X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=app%2FHttp%2FControllers%2FTechniqueController.php;h=7173f1edce28ad515b364e79d2eeb98a454dead1;hb=a6ae4c17a843b876fb7bf552577a76b79645d55b;hp=8694c046de5e1dd1520158c883e55ef8486a52bd;hpb=2c5535946aa15278c6e969c9a9b24d32a45e5b12;p=alttp.git diff --git a/app/Http/Controllers/TechniqueController.php b/app/Http/Controllers/TechniqueController.php index 8694c04..7173f1e 100644 --- a/app/Http/Controllers/TechniqueController.php +++ b/app/Http/Controllers/TechniqueController.php @@ -3,13 +3,45 @@ 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 byType(Request $request, $type) { + $techs = Technique::where('index', true)->where('type', '=', $type); + $this->applyFilter($request, $techs); + return $techs->get()->toJson(); + } + + public function byTypeAndName(Request $request, $type, $name) { + $tech = Technique::where('type', '=', $type)->where('name', '=', $name)->firstOrFail(); + $this->authorize('view', $tech); + $tech->load(['chapters', 'relations']); + return $tech->toJson(); + } + + public function forMap($map) { + $techs = TechniqueMap::with(['technique', 'technique.relations'])->where('map', '=', $map); + + return $techs->get()->toJson(); + } + public function search(Request $request) { + $techs = Technique::where('index', '=', 1); + $this->applyFilter($request, $techs); + return $techs->get()->toJson(); + } + + public function single(Request $request, Technique $tech) { + $this->authorize('view', $tech); + $tech->load(['chapters', 'relations']); + return $tech->toJson(); + } + + protected function applyFilter(Request $request, Builder $query) { $validatedData = $request->validate([ 'phrase' => 'string|nullable', 'ruleset' => 'array|nullable', @@ -20,15 +52,13 @@ class TechniqueController extends Controller 'type' => 'string|nullable', ]); - $techs = Technique::where('index', '=', 1); - if (!empty($validatedData['type'])) { - $techs = $techs->where('type', '=', $validatedData['type']); + $query->where('type', '=', $validatedData['type']); } if (!empty($validatedData['phrase'])) { $search = $validatedData['phrase']; - $techs = $techs->where(function (Builder $query) use ($search) { + $query->where(function (Builder $query) use ($search) { $query->where('title', 'LIKE', '%'.$search.'%') ->orWhere('short', 'LIKE', '%'.$search.'%'); }); @@ -42,7 +72,7 @@ class TechniqueController extends Controller $any = $com || $owg || $mg || $nl; $all = $com && $owg && $mg && $nl; if ($any && !$all) { - $techs->where(function(Builder $query) use ($com, $owg, $mg, $nl) { + $query->where(function(Builder $query) use ($com, $owg, $mg, $nl) { $query->whereNull('rulesets'); if ($com) { $query->orWhere('rulesets->competitive', '=', true); @@ -59,14 +89,6 @@ class TechniqueController extends Controller }); } } - - return $techs->get()->toJson(); - } - - public function single(Request $request, Technique $tech) { - $this->authorize('view', $tech); - $tech->load(['chapters', 'relations']); - return $tech->toJson(); } }