3 namespace App\Http\Controllers;
5 use App\Models\Technique;
6 use Illuminate\Database\Eloquent\Builder;
7 use Illuminate\Http\Request;
9 class TechniqueController extends Controller
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',
23 $techs = Technique::where('index', '=', 1);
25 if (!empty($validatedData['type'])) {
26 $techs = $techs->where('type', '=', $validatedData['type']);
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.'%');
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;
45 $techs->where(function(Builder $query) use ($com, $owg, $mg, $nl) {
46 $query->whereNull('rulesets');
48 $query->orWhere('rulesets->competitive', '=', true);
51 $query->orWhere('rulesets->owg', '=', true);
54 $query->orWhere('rulesets->mg', '=', true);
57 $query->orWhere('rulesets->nl', '=', true);
63 return $techs->get()->toJson();
66 public function single(Request $request, Technique $tech) {
67 $this->authorize('view', $tech);
68 $tech->load(['chapters', 'relations']);
69 return $tech->toJson();