response = Gate::inspect('create', [Like::class]))->allowed(); } /** * Get the arguments for the like mutation. * * @return Argument[] */ public function arguments(): array { $type = new LikeType(); return $this->resolveBindArguments($type->fieldClasses(), false); } /** * @param array $args * @return array */ public function rulesForValidation(array $args = []): array { $type = new LikeType(); return collect($type->fieldClasses()) ->filter(fn (Field $field): bool => $field instanceof CreatableField) ->mapWithKeys(fn (Field&CreatableField $field): array => [$field->name() => $field->getCreationRules($args)]) ->all(); } /** * The base return type of the mutation. */ public function baseType(): LikeType { return new LikeType(); } public function type(): Type { return GraphQL::type($this->baseType()->name()); } /** * @param array $args * @return Like|null */ public function resolve($root, array $args, $context, ResolveInfo $resolveInfo): mixed { $validated = Validator::make($args, $this->rulesForValidation($args))->validated(); /** @var Model&Likeable $likeable */ $likeable = Arr::first($validated); return $likeable->toggleLike(Auth::user()); } }