frist graphql query to materio_graphql schema is working

going to refactor every thing with graphql
This commit is contained in:
2020-12-10 22:46:27 +01:00
parent 2071a99ca2
commit 2739df96e2
14 changed files with 1087 additions and 47 deletions

View File

@@ -1,5 +1,3 @@
type Mutation
scalar Violation
type Materiau {
@@ -12,18 +10,35 @@ type Materiau {
images: [Image]
}
type MateriauResponse implements Response {
errors: [Violation]
materiau: Materiau
}
interface Response {
errors: [Violation]
}
input MateriauInput {
type Article {
id: Int!
uuid: String!
title: String!
description: String
author: String
body: String
linked_materials: [Materiau]
images: [Image]
videos: [VideoLink]
# date: [String]
# showroom: [Showroom]
# source: Link
# tags: []
# thesaurus: []
}
# type Showroom {
# id: Int!
# uuid: String!
# }
#
#
# type Link {
# url: String!
# title: String
# }
type VideoLink {
url: String
}
type Image {

View File

@@ -2,6 +2,6 @@ extend type Query {
materiau(id: Int!): Materiau
}
extend type Mutation {
createMateriau(data: MateriauInput): MateriauResponse
extend type Query {
article(id: Int!): Article
}

View File

@@ -24,31 +24,14 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
public function registerResolvers(ResolverRegistryInterface $registry) {
$builder = new ResolverBuilder();
// Materiau
$registry->addFieldResolver('Query', 'materiau',
$builder->produce('entity_load')
->map('type', $builder->fromValue('node'))
->map('bundles', $builder->fromValue(['materiau']))
->map('id', $builder->fromArgument('id'))
);
// Create materiau mutation.
$registry->addFieldResolver('Mutation', 'createMateriau',
$builder->produce('create_materiau')
->map('data', $builder->fromArgument('data'))
);
$registry->addFieldResolver('MateriauResponse', 'materiau',
$builder->callback(function (MateriauResponse $response) {
return $response->materiau();
})
);
$registry->addFieldResolver('MateriauResponse', 'errors',
$builder->callback(function (MateriauResponse $response) {
return $response->getViolations();
})
);
$registry->addFieldResolver('Materiau', 'id',
$builder->produce('entity_id')
->map('entity', $builder->fromParent())
@@ -99,6 +82,84 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
->map('field', $builder->fromValue('field_materiau_images'))
);
// Article
$registry->addFieldResolver('Query', 'article',
$builder->produce('entity_load')
->map('type', $builder->fromValue('node'))
->map('bundles', $builder->fromValue(['article']))
->map('id', $builder->fromArgument('id'))
);
// $registry->addFieldResolver('ArticleResponse', 'article',
// $builder->callback(function (ArticleResponse $response) {
// return $response->article();
// })
// );
$registry->addFieldResolver('Article', 'id',
$builder->produce('entity_id')
->map('entity', $builder->fromParent())
);
$registry->addFieldResolver('Article', 'uuid',
$builder->produce('entity_uuid')
->map('entity', $builder->fromParent())
);
$registry->addFieldResolver('Article', 'title',
$builder->compose(
$builder->produce('entity_label')
->map('entity', $builder->fromParent())
)
);
$registry->addFieldResolver('Article', 'author',
$builder->compose(
$builder->produce('entity_owner')
->map('entity', $builder->fromParent()),
$builder->produce('entity_label')
->map('entity', $builder->fromParent())
)
);
$registry->addFieldResolver('Article', 'body',
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:node'))
->map('value', $builder->fromParent())
->map('path', $builder->fromValue('body.value'))
);
// https://github.com/drupal-graphql/graphql/blob/8.x-4.x/doc/SUMMARY.md
// https://blog.chrismitchellonline.com/posts/custom_graphql_data/
$registry->addFieldResolver('Article', 'linked_materials',
$builder->compose(
$builder->produce('entity_reference')
->map('entity', $builder->fromParent())
->map('field', $builder->fromValue('field_linked_materials'))
)
);
$registry->addFieldResolver('Article', 'images',
$builder->produce('entity_reference')
->map('entity', $builder->fromParent())
->map('field', $builder->fromValue('field_visuel'))
);
$registry->addFieldResolver('Article', 'videos',
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:node'))
->map('value', $builder->fromParent())
->map('path', $builder->fromValue('field_video'))
);
// VideoLink
$registry->addFieldResolver('VideoLink', 'url',
$builder->produce('property_path')
->map('type', $builder->fromValue('field_item:video_embed_field'))
->map('value', $builder->fromParent())
->map('path', $builder->fromValue('value'))
);
// Image
$registry->addFieldResolver('Image', 'id',
$builder->produce('entity_id')
->map('entity', $builder->fromParent())
@@ -122,7 +183,6 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
->map('style', $builder->fromValue('card_medium_half'))
);
// Response type resolver.
$registry->addTypeResolver('Response', [
__CLASS__,