in src/Service.GraphQLBuilder/Mutations/MutationBuilder.cs [119:197]
private static void AddMutations(
string dbEntityName,
EntityActionOperation operation,
Dictionary<string, EntityMetadata>? entityPermissionsMap,
NameNode name,
Dictionary<NameNode, InputObjectTypeDefinitionNode> inputs,
ObjectTypeDefinitionNode objectTypeDefinitionNode,
DocumentNode root,
DatabaseType databaseType,
RuntimeEntities entities,
List<FieldDefinitionNode> mutationFields,
string returnEntityName,
bool IsMultipleCreateOperationEnabled = false
)
{
IEnumerable<string> rolesAllowedForMutation = IAuthorizationResolver.GetRolesForOperation(dbEntityName, operation: operation, entityPermissionsMap);
if (rolesAllowedForMutation.Count() > 0)
{
switch (operation)
{
case EntityActionOperation.Create:
// Get the create one/many fields for the create mutation.
IEnumerable<FieldDefinitionNode> createMutationNodes = CreateMutationBuilder.Build(name,
inputs,
objectTypeDefinitionNode,
root,
databaseType,
entities,
dbEntityName,
returnEntityName,
rolesAllowedForMutation,
IsMultipleCreateOperationEnabled);
mutationFields.AddRange(createMutationNodes);
break;
case EntityActionOperation.Update:
// Generate Mutation operation for Patch and Update both for CosmosDB
mutationFields.Add(UpdateAndPatchMutationBuilder.Build(
name,
inputs,
objectTypeDefinitionNode,
root,
entities,
dbEntityName,
databaseType,
returnEntityName,
rolesAllowedForMutation));
if (databaseType is DatabaseType.CosmosDB_NoSQL)
{
mutationFields.Add(UpdateAndPatchMutationBuilder.Build(
name,
inputs,
objectTypeDefinitionNode,
root,
entities,
dbEntityName,
databaseType,
returnEntityName,
rolesAllowedForMutation,
EntityActionOperation.Patch,
operationNamePrefix: "patch"));
}
break;
case EntityActionOperation.Delete:
mutationFields.Add(DeleteMutationBuilder.Build(
name,
objectTypeDefinitionNode,
entities[dbEntityName],
dbEntityName,
databaseType,
returnEntityName,
rolesAllowedForMutation));
break;
default:
throw new ArgumentOutOfRangeException(paramName: "action", message: "Invalid argument value provided.");
}
}
}