outline-8.x-1.x-dev/modules/outline_graphql/src/Plugin/GraphQL/Schema/OutlineSchema.php

modules/outline_graphql/src/Plugin/GraphQL/Schema/OutlineSchema.php
<?php

namespace Drupal\outline_graphql\Plugin\GraphQL\Schema;

use Drupal\graphql\GraphQL\ResolverBuilder;
use Drupal\graphql\GraphQL\ResolverRegistry;
use Drupal\graphql\GraphQL\ResolverRegistryInterface;
use Drupal\graphql\Plugin\GraphQL\Schema\SdlSchemaPluginBase;
use Drupal\outline_graphql\Wrappers\QueryConnection;

/**
 * @Schema(
 *   id = "outline",
 *   name = "Outline schema"
 * )
 */
class OutlineSchema extends SdlSchemaPluginBase {

  /**
   * {@inheritdoc}
   */
  public function getResolverRegistry() {
    $builder = new ResolverBuilder();
    $registry = new ResolverRegistry();

    $this->addQueryFields($registry, $builder);
    $this->addEntryFields($registry, $builder);
    $this->addOutlineFields($registry, $builder);
    $this->addConnectionFields('OutlineConnection', $registry, $builder);

    // Set parent entry mutation.
    $registry->addFieldResolver('Mutation', 'setParentEntry',
      $builder->produce('set_parent_entry')
        ->map('eid', $builder->fromArgument('eid'))
        ->map('parentEid', $builder->fromArgument('parentEid'))
    );

    // Add entry mutation.
    $registry->addFieldResolver('Mutation', 'addEntry',
      $builder->produce('add_entry')
        ->map('parentEid', $builder->fromArgument('parentEid'))
    );

    // Delete entry mutation.
    $registry->addFieldResolver('Mutation', 'deleteEntry',
      $builder->produce('delete_entry')
        ->map('eid', $builder->fromArgument('eid'))
    );

    // Rename entry mutation.
    $registry->addFieldResolver('Mutation', 'renameEntry',
      $builder->produce('rename_entry')
        ->map('eid', $builder->fromArgument('eid'))
        ->map('newName', $builder->fromArgument('newName'))
    );

    // Expand entry mutation.
    $registry->addFieldResolver('Mutation', 'expandEntry',
      $builder->produce('expand_entry')
	->map('eid', $builder->fromArgument('eid'))
        ->map('depth', $builder->fromArgument('depth'))
    );

    // Collapse entry mutation.
    $registry->addFieldResolver('Mutation', 'collapseEntry',
      $builder->produce('collapse_entry')
	->map('eid', $builder->fromArgument('eid'))
        ->map('depth', $builder->fromArgument('depth'))
    );

    return $registry;
  }

  /**
   * @param \Drupal\graphql\GraphQL\ResolverRegistry $registry
   * @param \Drupal\graphql\GraphQL\ResolverBuilder $builder
   */
  protected function addQueryFields(ResolverRegistry $registry, ResolverBuilder $builder) {

    // entry
    $registry->addFieldResolver('Query', 'entry',
      $builder->produce('entity_load')
        ->map('type', $builder->fromValue('outline_entry'))
        ->map('id', $builder->fromArgument('eid'))
    );

    // outline
    $registry->addFieldResolver('Query', 'outline',
      $builder->produce('entity_load')
        ->map('type', $builder->fromValue('outline'))
        ->map('bundles', $builder->fromValue(['outline']))
        ->map('id', $builder->fromArgument('oid'))
    );

    // outlines
    $registry->addFieldResolver('Query', 'outlines',
      $builder->produce('query_outlines')
        ->map('offset', $builder->fromArgument('offset'))
        ->map('limit', $builder->fromArgument('limit'))
    );

    // serverUuid
    $registry->addFieldResolver('Query', 'serverUuid',
      $builder->produce('server_uuid')
    );
  
  }

  /**
   * @param \Drupal\graphql\GraphQL\ResolverRegistryInterface $registry
   * @param \Drupal\graphql\GraphQL\ResolverBuilder $builder
   */
  protected function addEntryFields(ResolverRegistryInterface $registry, ResolverBuilder $builder) {

    // eid
    $registry->addFieldResolver('Entry', 'eid',
      $builder->produce('entity_id')
        ->map('entity', $builder->fromParent())
    );

    // uuid
    $registry->addFieldResolver('Entry', 'uuid',
       $builder->produce('entity_uuid')
         ->map('entity', $builder->fromParent())
    );

    // parentEid
    $registry->addFieldResolver('Entry', 'parentEid',
      $builder->produce('entry_parent_eid')
        ->map('entity', $builder->fromParent())
    );

    // parentUuid
    $registry->addFieldResolver('Entry', 'parentUuid',
      $builder->produce('entry_parent_uuid')
        ->map('entity', $builder->fromParent())
    );

    // editFormUrl
    $registry->addFieldResolver('Entry', 'editFormUrl',
      $builder->produce('edit_form_url')
        ->map('entity', $builder->fromParent())
    );

    // referencedEntityType
    $registry->addFieldResolver('Entry', 'referencedEntityType',
      $builder->produce('referenced_entity_type')
        ->map('entity', $builder->fromParent())
    );

    // referencedEntityId
    $registry->addFieldResolver('Entry', 'referencedEntityId',
      $builder->produce('referenced_entity_id')
        ->map('entity', $builder->fromParent())
    );

    // referencedEntityMode
    $registry->addFieldResolver('Entry', 'referencedEntityMode',
      $builder->produce('referenced_entity_mode')
        ->map('entity', $builder->fromParent())
    );

    // referencedEntityDisplay
    $registry->addFieldResolver('Entry', 'referencedEntityDisplay',
      $builder->produce('referenced_entity_display')
        ->map('entity', $builder->fromParent())
    );

    // referencedEntityEditFormUrl
    $registry->addFieldResolver('Entry', 'referencedEntityEditFormUrl',
      $builder->produce('referenced_entity_edit_form_url')
        ->map('entity', $builder->fromParent())
    );

    // referencedEntityUuid
      $registry->addFieldResolver('Entry', 'referencedEntityUuid',
      $builder->produce('referenced_entity_uuid')
        ->map('entity', $builder->fromParent())
    );

    // name
    $registry->addFieldResolver('Entry', 'name',
      $builder->compose(
        $builder->produce('entity_label')
          ->map('entity', $builder->fromParent())
      )
    );

    // expanded
    $registry->addFieldResolver('Entry', 'expanded',
        $builder->produce('entry_expanded')
          ->map('entity', $builder->fromParent())
    );

    // content
    $registry->addFieldResolver('Entry', 'content',
      $builder->produce('entry_content')
        ->map('entity', $builder->fromParent())
    );

    // rendered
    $registry->addFieldResolver('Entry', 'rendered',
      $builder->compose(
//        $builder->produce('entry_rendered')
//          ->map('entity', $builder->fromParent()),
        $builder->produce('entity_rendered')
          ->map('entity', $builder->fromParent())
      )
    );

    // children
    $registry->addFieldResolver('Entry', 'children',
      $builder->produce('entry_children')
        ->map('entity', $builder->fromParent())
    );

    // childCount
    $registry->addFieldResolver('Entry', 'childCount',
      $builder->produce('entry_child_count')
        ->map('entity', $builder->fromParent())
    );

  }

  /**
   * @param \Drupal\graphql\GraphQL\ResolverRegistry $registry
   * @param \Drupal\graphql\GraphQL\ResolverBuilder $builder
   */
  protected function addOutlineFields(ResolverRegistry $registry, ResolverBuilder $builder) {

    // oid
    $registry->addFieldResolver('Outline', 'oid',
      $builder->produce('entity_id')
        ->map('entity', $builder->fromParent())
    );

    // uuid
    $registry->addFieldResolver('Outline', 'uuid',
      $builder->produce('entity_uuid')
      ->map('entity', $builder->fromParent())
    );

    // name
    $registry->addFieldResolver('Outline', 'name',
      $builder->compose(
        $builder->produce('entity_label')
          ->map('entity', $builder->fromParent())
      )
    );

    // rootEntry
    $registry->addFieldResolver('Outline', 'rootEntry',
      $builder->compose(
        $builder->produce('root_eid')
          ->map('entity', $builder->fromParent()),
        $builder->produce('entity_load')
        ->map('type', $builder->fromValue('outline_entry'))
        ->map('id', $builder->fromParent())
    ));

    // serverUuid
    $registry->addFieldResolver('Outline', 'serverUuid',
      $builder->compose(
        $builder->produce('server_uuid')
          ->map('entity', $builder->fromParent())
    ));
  }

  /**
   * @param string $type
   * @param \Drupal\graphql\GraphQL\ResolverRegistry $registry
   * @param \Drupal\graphql\GraphQL\ResolverBuilder $builder
   */
  protected function addConnectionFields($type, ResolverRegistry $registry, ResolverBuilder $builder) {

    // total
    $registry->addFieldResolver($type, 'total',
      $builder->callback(function (QueryConnection $connection) {
        return $connection->total();
      })
    );

    // outlines
    $registry->addFieldResolver($type, 'outlines',
      $builder->callback(function (QueryConnection $connection) {
        return $connection->outlines();
      })
    );
  }

  public function validateSchema() {
    // TODO: Implement validateSchema() method.
  }

  public function getServer() {
    // TODO: Implement getServer() method.
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc