| Current Path : /home/deltalab/PMS/partner-manager-backend/graphql/schema/ |
| 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 };