Your IP : 216.73.216.220


Current Path : /home/deltalab/PMS/partner-manager-backend/graphql/schema/
Upload File :
Current File : //home/deltalab/PMS/partner-manager-backend/graphql/schema/warehouse.schema.js

const auth = require('../../services/auth');

// Import dependencies
const { partnerTC } = require('../types/partner.type');
const { warehouseTC } = require('../types/warehouse.type');

const { warehouseModel } = require('../../models/mongoose/warehouse');

// RELATIONS =========================================
warehouseTC.addRelation(
  'partner',
  {
    resolver: () => partnerTC.mongooseResolvers.findById(),
    prepareArgs: {
      _id: (source) => source.partnerId,
    },
    projection: { partnerId: true },
  },
);

warehouseTC.addResolver({
  kind: 'query',
  name: 'getChannelAvailableWarehouses',
  type: [warehouseTC],
  args: {
    isShared: 'Boolean',
    partnerId: 'MongoID',
    channelId: 'MongoID',
  },
  resolve: async ({ args }) => {
    const request = {};

    if (args.isShared) {
      request.isShared = args.isShared;
    }
    if (args.partnerId) {
      request.partnerId = args.partnerId;
    }
    if (args.channelId) {
      request.channels = { $in: args.channelId };
    }

    const list = await warehouseModel.find(request).exec();
    return list;
  },
});

// QUERIES ===========================================
const warehouseQuery = {
  ...auth.authenticationRequired({
    warehouseById: warehouseTC.mongooseResolvers.findById(),
    warehouseMany: warehouseTC.mongooseResolvers.findMany(),
    warehouseCount: warehouseTC.mongooseResolvers.count(),
    getChannelAvailableWarehouses: warehouseTC.getResolver('getChannelAvailableWarehouses'),
  }),
};

// MUTATIONS =========================================
const warehouseMutation = {
  ...auth.authenticationRequired({
    warehouseCreateOne: warehouseTC.mongooseResolvers.createOne(),
    warehouseCreateMany: warehouseTC.mongooseResolvers.createMany(),
    warehouseUpdateById: warehouseTC.mongooseResolvers.updateById(),
    warehouseUpdateOne: warehouseTC.mongooseResolvers.updateOne(),
    warehouseUpdateMany: warehouseTC.mongooseResolvers.updateMany(),
    warehouseRemoveById: warehouseTC.mongooseResolvers.removeById(),
    warehouseRemoveOne: warehouseTC.mongooseResolvers.removeOne(),
    warehouseRemoveMany: warehouseTC.mongooseResolvers.removeMany(),
  }),
};

// EXPORTS ===========================================
module.exports = {
  warehouseQuery,
  warehouseMutation,
  warehouseTC,
};