frist graphql query to materio_graphql schema is working
going to refactor every thing with graphql
This commit is contained in:
@@ -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 {
|
||||
|
@@ -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
|
||||
}
|
||||
|
@@ -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__,
|
||||
|
Reference in New Issue
Block a user