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/indaco-module.schema.js

const { indacoModuleTC, indacoModuleUpdateInput } = require('../types/indaco-module.type');
const { indacoModuleModel } = require('../../models/mongoose/indaco-module');
const auth = require('../../services/auth');

// RESOLVERS =========================================
/**
 * Register module resolver
 */
indacoModuleTC.addResolver({
  kind: 'mutation',
  name: 'registerIndacoModule',
  type: indacoModuleTC,
  args: {
    record: { type: indacoModuleUpdateInput }
  },
  resolve: async ({ args }) => {
    // check if the module already exists with the spefified code;
    // if not: create it; otherwise: update it
    const moduleFilter = { code: args.record.code };
    const dbModule = await indacoModuleModel.findOne(moduleFilter).lean();

    let resultModule;
    if (dbModule) {
      await indacoModuleModel.updateOne(moduleFilter, args.record).lean();
      resultModule = await indacoModuleModel.findById(dbModule._id).lean();
    } else {
      resultModule = await new indacoModuleModel(args.record).save();
    }
    return resultModule;
  },
});

// QUERIES ===========================================
const indacoModuleQuery = {
  ...auth.authenticationRequired({
    indacoModuleById: indacoModuleTC.mongooseResolvers.findById(),
    indacoModuleByIds: indacoModuleTC.mongooseResolvers.findByIds(),
    indacoModuleMany: indacoModuleTC.mongooseResolvers.findMany(),
    indacoModuleCount: indacoModuleTC.mongooseResolvers.count(),
  }),
};

// MUTATIONS ===========================================
const indacoModuleMutation = {
  ...auth.apiKeyRequired({
    registerIndacoModule: indacoModuleTC.getResolver('registerIndacoModule'),
  }, 'MODULE_REGISTRATION'),
};

// EXPORTS ===========================================
module.exports = { indacoModuleQuery, indacoModuleMutation };