| Current Path : /home/deltalab/PMS/ims-connector/graphql/schema/ |
| Current File : //home/deltalab/PMS/ims-connector/graphql/schema/listing.schema.js |
// RESOURCES =================================================
const listingAdapter = require('../../logic/shopify/listing');
// MODELS ====================================================
const { ListingId } = require('../types/listing.type');
const { listingIdTC } = require('../types/listing.type');
const { listingInputType } = require('../types/listing.type');
const { listingInputTypeExt } = require('../types/listing.type');
const { listingTC } = require('../types/listing.type');
// RESOLVERS =================================================
listingTC.addResolver(
{
kind: 'mutation',
name: 'listingCreateOne',
type: listingIdTC,
args: {
input: listingInputType,
},
resolve: async ({ args }) => {
const { input } = args;
// Map listing to collection
const title = input.name;
const descriptionHtml = input.description;
const listingId = await listingAdapter.createListing(title, descriptionHtml);
return new ListingId(listingId);
},
},
);
listingTC.addResolver(
{
kind: 'mutation',
name: 'listingDeleteById',
type: listingIdTC,
args: {
imsgid: 'String',
},
resolve: async ({ args }) => {
const { imsgid } = args;
const deletedListingId = await listingAdapter.deleteListing(imsgid);
console.log(`deleted listing ${deletedListingId}`);
const listingId = new ListingId(deletedListingId);
return listingId;
},
},
);
listingTC.addResolver(
{
kind: 'mutation',
name: 'listingAddProducts',
type: listingIdTC,
description: 'Add the products identified by the given imsgid to the listing specified by its imsgid',
args: {
imsgid: 'String',
products: '[String!]!',
},
resolve: async ({ args }) => {
const { imsgid, products } = args;
const listingId = await listingAdapter.addProductsToListing(imsgid, products);
return new ListingId(listingId);
},
},
);
listingTC.addResolver(
{
kind: 'mutation',
name: 'listingRemoveProducts',
type: listingIdTC,
description: 'Remove the products identified by the given imsgid from the listing specified by its imsgid',
args: {
imsgid: 'String',
products: '[String!]!',
},
resolve: async ({ args }) => {
const { imsgid, products } = args;
const listingId = await listingAdapter.removeProductsFromListing(imsgid, products);
return new ListingId(listingId);
},
},
);
listingTC.addResolver(
{
kind: 'mutation',
name: 'listingUpdateOne',
type: listingIdTC,
args: {
input: listingInputTypeExt,
},
resolve: async ({ args }) => {
const { input } = args;
const id = input.imsgid;
const title = input.name;
const listingId = await listingAdapter.updateListing(id, title);
return new ListingId(listingId);
},
},
);
// QUERIES ===========================================
const listingQuery = {
// intentionally empty
};
const listingMutation = {
listingAddProducts: listingTC.getResolver('listingAddProducts'),
listingRemoveProducts: listingTC.getResolver('listingRemoveProducts'),
listingDeleteById: listingTC.getResolver('listingDeleteById'),
listingUpdateOne: listingTC.getResolver('listingUpdateOne'),
listingCreateOne: listingTC.getResolver('listingCreateOne'),
};
// EXPORTS =================================================
module.exports = {
listingQuery,
listingMutation,
};