3 namespace App\Http\Controllers;
5 use App\Models\Technique;
6 use App\Models\TechniqueMap;
7 use Illuminate\Database\Eloquent\Builder;
8 use Illuminate\Http\Request;
10 class TechniqueController extends Controller
13 public function byType(Request $request, $type) {
14 $techs = Technique::where('index', true)->where('type', '=', $type);
15 $this->applyFilter($request, $techs);
16 return $techs->get()->toJson();
19 public function byTypeAndName(Request $request, $type, $name) {
20 $tech = Technique::where('type', '=', $type)->where('name', '=', $name)->firstOrFail();
21 $this->authorize('view', $tech);
22 $tech->load(['chapters', 'relations']);
23 return $tech->toJson();
26 public function forMap($map) {
27 $techs = TechniqueMap::with(['technique', 'technique.relations'])->where('map', '=', $map);
29 return $techs->get()->toJson();
32 public function search(Request $request) {
33 $techs = Technique::where('index', '=', 1);
34 $this->applyFilter($request, $techs);
35 return $techs->get()->toJson();
38 public function single(Request $request, Technique $tech) {
39 $this->authorize('view', $tech);
40 $tech->load(['chapters', 'relations']);
41 return $tech->toJson();
44 protected function applyFilter(Request $request, Builder $query) {
45 $validatedData = $request->validate([
46 'phrase' => 'string|nullable',
47 'ruleset' => 'array|nullable',
48 'ruleset.competitive' => 'boolean',
49 'ruleset.mg' => 'boolean',
50 'ruleset.nl' => 'boolean',
51 'ruleset.owg' => 'boolean',
52 'type' => 'string|nullable',
55 if (!empty($validatedData['type'])) {
56 $query->where('type', '=', $validatedData['type']);
59 if (!empty($validatedData['phrase'])) {
60 $search = $validatedData['phrase'];
61 $query->where(function (Builder $query) use ($search) {
62 $query->where('title', 'LIKE', '%'.$search.'%')
63 ->orWhere('short', 'LIKE', '%'.$search.'%');
67 if (isset($validatedData['ruleset'])) {
68 $com = isset($validatedData['ruleset']['competitive']) && $validatedData['ruleset']['competitive'];
69 $owg = isset($validatedData['ruleset']['owg']) && $validatedData['ruleset']['owg'];
70 $mg = isset($validatedData['ruleset']['mg']) && $validatedData['ruleset']['mg'];
71 $nl = isset($validatedData['ruleset']['nl']) && $validatedData['ruleset']['nl'];
72 $any = $com || $owg || $mg || $nl;
73 $all = $com && $owg && $mg && $nl;
75 $query->where(function(Builder $query) use ($com, $owg, $mg, $nl) {
76 $query->whereNull('rulesets');
78 $query->orWhere('rulesets->competitive', '=', true);
81 $query->orWhere('rulesets->owg', '=', true);
84 $query->orWhere('rulesets->mg', '=', true);
87 $query->orWhere('rulesets->nl', '=', true);