private static void AddMutations()

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.");
                }
            }
        }