added commerce's products and variations queries to graphql

This commit is contained in:
Bachir Soussi Chiadmi 2021-01-04 21:44:13 +01:00
parent dfe6a21021
commit 830f5a5909
3 changed files with 211 additions and 0 deletions

View File

@ -72,6 +72,37 @@ type SearchResult {
reference: String
}
type Product {
id: Int!
uuid: String!
title: String
bundle: String
body: String
path: String
variations: [Variation]
}
type Variation {
id: Int!
uuid: String!
title: String
description: String
subscription_type: String
sku: String
price: Price
product_id: Int
# list_price
# billing_schedule
# license_expiration
# license_type
# field_multiple
}
type Price {
value: Int
currency: String
}
type Sample {
showroom: Showroom
location: String

View File

@ -37,3 +37,19 @@ extend type Query {
extend type Query {
company(id: Int!): Company
}
extend type Query {
product(id: Int!): Product
}
extend type Query {
products(ids: [Int]): [Product]
}
# extend type Query {
# variation(id: Int!): Variation
# }
#
# extend type Query {
# variations(id: [Int]): Variation
# }

View File

@ -41,6 +41,12 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
$this->addCompany($registry, $builder);
$this->addProduct($registry, $builder);
$this->addVariation($registry, $builder);
$this->addPrice($registry, $builder);
$this->addAddress($registry, $builder);
$this->addFilefield($registry, $builder);
@ -1075,6 +1081,164 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
);
}
protected function addProduct(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
$registry->addFieldResolver('Query', 'product',
$builder->produce('entity_load')
->map('type', $builder->fromValue('commerce_product'))
// ->map('bundles', $builder->fromValue(['materiau']))
->map('id', $builder->fromArgument('id'))
);
$registry->addFieldResolver('Query', 'products',
$builder->produce('entity_load_multiple')
->map('type', $builder->fromValue('commerce_product'))
// ->map('bundles', $builder->fromValue(['materiau']))
->map('ids', $builder->fromArgument('ids'))
);
$registry->addFieldResolver('Product', 'id',
$builder->produce('entity_id')
->map('entity', $builder->fromParent())
);
$registry->addFieldResolver('Product', 'uuid',
$builder->produce('entity_uuid')
->map('entity', $builder->fromParent())
);
$registry->addFieldResolver('Product', 'bundle',
$builder->produce('entity_bundle')
->map('entity', $builder->fromParent())
);
$registry->addFieldResolver('Product', 'path',
$builder->compose(
$builder->produce('entity_url')
->map('entity', $builder->fromParent()),
$builder->produce('url_path')
->map('url', $builder->fromParent())
)
);
$registry->addFieldResolver('Product', 'title',
$builder->compose(
$builder->produce('entity_label')
->map('entity', $builder->fromParent())
));
$registry->addFieldResolver('Product', 'body',
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:node'))
->map('value', $builder->fromParent())
->map('path', $builder->fromValue('body.value'))
);
$registry->addFieldResolver('Product', 'variations',
$builder->produce('entity_reference')
->map('entity', $builder->fromParent())
->map('field', $builder->fromValue('variations'))
);
}
protected function addVariation(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
// $registry->addFieldResolver('Query', 'product',
// $builder->produce('entity_load')
// ->map('type', $builder->fromValue('commerce_product_variation'))
// // ->map('bundles', $builder->fromValue(['materiau']))
// ->map('id', $builder->fromArgument('id'))
// );
// $registry->addFieldResolver('Query', 'product',
// $builder->produce('entity_load_multiple')
// ->map('type', $builder->fromValue('product'))
// // ->map('bundles', $builder->fromValue(['materiau']))
// ->map('ids', $builder->fromArgument('ids'))
// );
$registry->addFieldResolver('Variation', 'id',
$builder->produce('entity_id')
->map('entity', $builder->fromParent())
);
$registry->addFieldResolver('Variation', 'uuid',
$builder->produce('entity_uuid')
->map('entity', $builder->fromParent())
);
$registry->addFieldResolver('Variation', 'bundle',
$builder->produce('entity_bundle')
->map('entity', $builder->fromParent())
);
$registry->addFieldResolver('Variation', 'path',
$builder->compose(
$builder->produce('entity_url')
->map('entity', $builder->fromParent()),
$builder->produce('url_path')
->map('url', $builder->fromParent())
)
);
$registry->addFieldResolver('Variation', 'title',
$builder->compose(
$builder->produce('entity_label')
->map('entity', $builder->fromParent())
));
$registry->addFieldResolver('Variation', 'description',
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:commerce_product_variation'))
->map('value', $builder->fromParent())
->map('path', $builder->fromValue('field_description.value'))
);
$registry->addFieldResolver('Variation', 'subscription_type',
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:commerce_product_variation'))
->map('value', $builder->fromParent())
->map('path', $builder->fromValue('subscription_type.value'))
);
$registry->addFieldResolver('Variation', 'sku',
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:commerce_product_variation'))
->map('value', $builder->fromParent())
->map('path', $builder->fromValue('sku.value'))
);
$registry->addFieldResolver('Variation', 'price',
$builder->produce('property_path')
->map('type', $builder->fromValue('entity:commerce_product_variation'))
->map('value', $builder->fromParent())
->map('path', $builder->fromValue('price'))
);
// product_id
// list_price
// billing_schedule
// license_expiration
// license_type
// field_multiple
}
protected function addPrice(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
$registry->addFieldResolver('Price', 'value',
$builder->compose(
$builder->callback(function($parent, $args){
return $parent[0]['number'];
})
));
$registry->addFieldResolver('Price', 'currency',
$builder->compose(
$builder->callback(function($parent, $args){
return $parent[0]['currency_code'];
})
));
}
/**
* Resolves the response type.
*