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) {
+ $query->where('title', 'LIKE', '%'.$search.'%')
+ ->orWhere('short', 'LIKE', '%'.$search.'%');
+ });
+ }
+
+ 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();
}