|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
namespace DeInternetJongens\LighthouseUtils\Generators\Mutations; |
|
4
|
|
|
|
|
5
|
|
|
use DeInternetJongens\LighthouseUtils\Generators\Arguments\IdArgumentGenerator; |
|
6
|
|
|
use DeInternetJongens\LighthouseUtils\Generators\Arguments\InputFieldsArgumentGenerator; |
|
7
|
|
|
use DeInternetJongens\LighthouseUtils\Generators\Arguments\RelationArgumentGenerator; |
|
8
|
|
|
use DeInternetJongens\LighthouseUtils\Models\GraphQLSchema; |
|
9
|
|
|
use GraphQL\Type\Definition\Type; |
|
10
|
|
|
|
|
11
|
|
|
class UpdateMutationGenerator |
|
12
|
|
|
{ |
|
13
|
|
|
/** |
|
14
|
|
|
* Generates a GraphQL Mutation to update a record |
|
15
|
|
|
* |
|
16
|
|
|
* @param string $typeName |
|
17
|
|
|
* @param Type[] $typeFields |
|
18
|
|
|
* @return string |
|
19
|
|
|
*/ |
|
20
|
|
|
public static function generate(string $typeName, array $typeFields): string |
|
21
|
|
|
{ |
|
22
|
|
|
$mutationName = 'update' . $typeName; |
|
23
|
|
|
$arguments = IdArgumentGenerator::generate($typeFields); |
|
24
|
|
|
$arguments = array_merge($arguments, RelationArgumentGenerator::generate($typeFields)); |
|
25
|
|
|
$arguments = array_merge($arguments, InputFieldsArgumentGenerator::generate($typeFields)); |
|
26
|
|
|
|
|
27
|
|
|
if (count($arguments) < 1) { |
|
28
|
|
|
return ''; |
|
29
|
|
|
} |
|
30
|
|
|
|
|
31
|
|
|
$mutation = sprintf(' %s(%s)', $mutationName, implode(', ', $arguments)); |
|
32
|
|
|
$mutation .= sprintf(': %1$s @update(model: "%1$s")', $typeName); |
|
33
|
|
|
|
|
34
|
|
|
if (config('lighthouse-utils.authorization')) { |
|
35
|
|
|
$permission = sprintf('update%1$s', $typeName); |
|
36
|
|
|
$mutation .= sprintf(' @can(if: "%1$s", model: "User")', $permission); |
|
37
|
|
|
} |
|
38
|
|
|
|
|
39
|
|
|
GraphQLSchema::register($mutationName, $typeName, 'mutation', $permission ?? null); |
|
40
|
|
|
|
|
41
|
|
|
return $mutation; |
|
42
|
|
|
} |
|
43
|
|
|
} |
|
44
|
|
|
|