Your IP : 216.73.216.220


Current Path : /home/deltalab/PMS/ims-connector/graphql/schema/
Upload File :
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,
};