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

const { dotenv } = require('dotenv').config();
// Import dependencies
const fs = require('fs');
const auth = require('../../services/auth');
const sfg = require('../../services/sfg');
const { storefrontTC, storefrontUpdateInput } = require('../types/storefront.type');
const { partnerTC } = require('../types/partner.type');
const { partnerIndacoModuleRequired, partnerIndacoAccessibleFeatureRequired } = require('../../services/indaco-module');
const { indacoModulesRegistries } = require('../../models/indaco-modules/index');

// Compose mongoose model to GraphQL

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

/**
 * BuBu resolver
 * unlink existing index files and generates a new one.
 */
storefrontTC.addResolver({
  kind: 'mutation',
  name: 'storefrontGenerate',
  type: storefrontTC,
  args: {
    record: { type: storefrontUpdateInput },
    html: 'String',
  },
  resolve: async ({ args }) => {
    const directory = args.record.storefront.location;
    const filePath = `${directory}/index.html`;
    if (fs.existsSync(directory)) {
      // if file exists, unlink it
      if (fs.existsSync(filePath)) {
        await fs.unlink(filePath, (err) => {
          if (err) throw err;
        });
      }

      // and then write it again
      await fs.writeFile(filePath,
        args.html,
        (err) => {
          if (err) throw err;
          console.log('File is created successfully.');
        });
      return args.record;
    }
  },
});

// QUERIES ===========================================
const storefrontQuery = {
  ...auth.authenticationRequired(
    partnerIndacoModuleRequired({
      storefrontById: storefrontTC.mongooseResolvers.findById(),
      storefrontMany: storefrontTC.mongooseResolvers.findMany(),
      storefrontCount: storefrontTC.mongooseResolvers.count(),
    }, indacoModulesRegistries.SFG.code),
  ),
};

// MUTATIONS =========================================
const storefrontMutation = {
  ...auth.authenticationRequired(
    partnerIndacoAccessibleFeatureRequired({
      storefrontCreateOne: sfg.storefrontCreateWrapper(storefrontTC.mongooseResolvers.createOne()),
      storefrontCreateMany: storefrontTC.mongooseResolvers.createMany(),
    }, indacoModulesRegistries.SFG.code, 'SFG-A'),
  ),
  ...auth.authenticationRequired(
    partnerIndacoAccessibleFeatureRequired({
      storefrontUpdateById: sfg.storefrontUpdateWrapper(storefrontTC.mongooseResolvers.updateById()),
      storefrontUpdateOne: storefrontTC.mongooseResolvers.updateOne(),
      storefrontUpdateMany: storefrontTC.mongooseResolvers.updateMany(),
    }, indacoModulesRegistries.SFG.code, 'SFG-C'),
  ),
  ...auth.authenticationRequired(
    partnerIndacoAccessibleFeatureRequired({
      storefrontRemoveById: sfg.storefrontDeleteWrapper(storefrontTC.mongooseResolvers.removeById()),
      storefrontRemoveOne: storefrontTC.mongooseResolvers.removeOne(),
      storefrontRemoveMany: storefrontTC.mongooseResolvers.removeMany(),
    }, indacoModulesRegistries.SFG.code, 'SFG-D'),
  ),
  ...auth.authenticationRequired(
    partnerIndacoAccessibleFeatureRequired({
      storefrontGenerate: storefrontTC.getResolver('storefrontGenerate'),
    }, indacoModulesRegistries.SFG.code, 'SFG-G'),
  ),
};

// EXPORTS ===========================================
module.exports = { storefrontQuery, storefrontMutation, storefrontTC };