| Current Path : /home/deltalab/PMS/ims-connector/graphql/schema/ |
| Current File : //home/deltalab/PMS/ims-connector/graphql/schema/product.schema.js |
const productAdapter = require('../../logic/shopify/product');
const { productIdTC, ProductAvailability, productAvailabilityTC } = require('../types/product.type');
const { ProductId } = require('../types/product.type');
const { productInputType } = require('../types/product.type');
const { productTC } = require('../types/product.type');
productTC.addResolver(
{
kind: 'query',
name: 'productById',
type: productTC,
args: {
id: 'ID!',
},
resolve: async (_, { args }) => {
const { id } = args;
const product = await productAdapter.getProduct(id);
return product;
},
},
);
productTC.addResolver(
{
kind: 'mutation',
name: 'productUpdateOne',
type: productIdTC,
args: {
input: productInputType,
},
resolve: async ({ args }) => {
const { input } = args;
const productId = new ProductId();
productId.imsgid = await productAdapter.updateProduct(input);
return productId;
},
},
);
productTC.addResolver(
{
kind: 'mutation',
name: 'productCreateOne',
type: productTC,
args: {
input: productInputType,
},
resolve: async ({ args }) => {
const { input } = args;
const productId = new ProductId();
productId.imsgid = await productAdapter.createProduct(input);
return productId;
},
},
);
/**
* Remove a product
*/
productTC.addResolver(
{
kind: 'mutation',
name: 'productDeleteById',
type: productIdTC,
args: {
id: 'ID!',
},
resolve: async ({ args }) => {
const { id } = args;
const productId = new ProductId();
productId.imsgid = await productAdapter.deleteProduct(id);
return productId;
},
},
);
/**
* Remove a product
*/
productTC.addResolver(
{
kind: 'mutation',
name: 'productAdjustQuantity',
type: productAvailabilityTC,
args: {
imsgid: 'ID!',
quantity: 'Float!',
},
resolve: async ({ args }) => {
const product = await productAdapter.getProductRawData(args.imsgid);
const variant = product.variants.edges[0].node;
const inventoryLevel = variant.inventoryItem.inventoryLevels.edges[0].node;
const availability = await productAdapter.inventoryAdjustQuantity(inventoryLevel.id, args.quantity);
const productAvailability = new ProductAvailability();
productAvailability.imsgid = product.id;
productAvailability.availability = availability
return productAvailability;
},
},
);
// QUERIES ===========================================
const productQuery = {
productById: productTC.getResolver('productById'),
};
const productMutation = {
productCreateOne: productTC.getResolver('productCreateOne'),
productDeleteById: productTC.getResolver('productDeleteById'),
productUpdateOne: productTC.getResolver('productUpdateOne'),
productAdjustQuantity: productTC.getResolver('productAdjustQuantity'),
};
// EXPORTS ===========================================
module.exports = {
productQuery,
productMutation,
};