UNPKG

@actonate/mirkwood

Version:

GraphQL based Rapid Server-side Development framework

272 lines (234 loc) 7.5 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _graphql = require('graphql'); var _types = require('../../lib/types'); var _types2 = _interopRequireDefault(_types); var _database = require('./database'); var _database2 = _interopRequireDefault(_database); var _resolver = require('../../lib/resolver'); var _resolver2 = _interopRequireDefault(_resolver); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var DatabaseMutations = function () { function DatabaseMutations() { _classCallCheck(this, DatabaseMutations); } _createClass(DatabaseMutations, [{ key: 'resolvers', value: function resolvers() { return { create: this.createResolver, update: this.updateResolver, destroy: this.destroyResolver }; } }, { key: 'generate', value: function generate(type, inputType, model) { var schema = model.schema; var modelDatasource = schema.datasource; var modelName = schema.name; return new _graphql.GraphQLObjectType({ name: [modelName, 'Database_Mutation'].join(''), fields: { create: this.createResolver('database.create', type, model, { args: { input: { type: inputType } } }), createMany: this.createResolver('database.create', type, model, { args: { input: { type: [inputType] } } }), update: this.updateResolver('database.update', type, model, { args: { _id: { type: _types2.default.ID, deprecationReason: 'Use find argument instead of _id as it supports more options' }, find: { type: _database2.default.generateFindType(model) }, input: { type: DatabaseMutations.generateUpdateType(model) } } }), destroy: this.destroyResolver('database.destroy', type, model, { args: { _id: { type: _types2.default.ID, deprecationReason: 'Use find argument instead of _id as it supports more options' }, find: { type: _database2.default.generateFindType(model) } } }), delete: this.deleteResolver('database.delete', type, model, { args: { _id: { type: _types2.default.ID, deprecationReason: 'Use find argument instead of _id as it supports more options' }, find: { type: _database2.default.generateFindType(model) } } }) } }); } }, { key: 'createResolver', value: function createResolver(resolverName, type, model, inputSchema) { var modelDatasource = model.schema.datasource; var args = inputSchema.args; var argsObjects = _types2.default.generateArgs(args, inputSchema.name); return { type: Array.isArray(args.input.type) ? _types2.default.Int : type, args: argsObjects, resolve: new _resolver2.default(resolverName, function (_, args) { var input = args.input; // take first property var result = new Promise(function (resolve, reject) { if (Array.isArray(input)) { _database2.default.createMany(modelDatasource, input).then(function (count) { resolve(count); }).catch(reject); } else { _database2.default.create(modelDatasource, input).then(function (res) { resolve(res); }).catch(reject); } }); return result; }) }; } }, { key: 'updateResolver', value: function updateResolver(resolverName, type, model, inputSchema) { var modelDatasource = model.schema.datasource; var args = inputSchema.args; // check if where is not specified then generate default if (!args.find && !args._id) { args.find = { fields: { _id: { type: _types2.default.ID } } }; } var argsObjects = _types2.default.generateArgs(args, inputSchema.name); return { type: _graphql.GraphQLBoolean, args: argsObjects, resolve: new _resolver2.default(resolverName, function (_, args) { if (!args.find) { args.find = { _id: args._id }; } var find = args.find; var input = args.input; var result = new Promise(function (resolve, reject) { _database2.default.update(modelDatasource, find, input).then(function (res) { resolve(res); }); }); return result; }) }; } }, { key: 'deleteResolver', value: function deleteResolver(resolverName, type, model, inputSchema) { var modelDatasource = model.schema.datasource; var args = inputSchema.args; // check if where is not specified then generate default if (!args.find && !args._id) { args.find = { fields: { _id: { type: _types2.default.ID } } }; } var argsObjects = _types2.default.generateArgs(args, inputSchema.name); return { type: _graphql.GraphQLBoolean, args: argsObjects, resolve: new _resolver2.default(resolverName, function (_, args) { if (!args.find) { args.find = { _id: args._id }; } var find = args.find; var result = new Promise(function (resolve, reject) { _database2.default.delete(modelDatasource, find).then(function (res) { resolve(res); }); }); return result; }) }; } }, { key: 'destroyResolver', value: function destroyResolver(resolverName, type, model, inputSchema) { var modelDatasource = model.schema.datasource; var args = inputSchema.args; // check if where is not specified then generate default if (!args.find && !args._id) { args.find = { fields: { _id: { type: _types2.default.ID } } }; } var argsObjects = _types2.default.generateArgs(args, inputSchema.name); return { type: _graphql.GraphQLBoolean, args: argsObjects, resolve: new _resolver2.default(resolverName, function (_, args) { if (!args.find) { args.find = { _id: args._id }; } var find = args.find; var result = new Promise(function (resolve, reject) { _database2.default.destroy(modelDatasource, find).then(function (res) { resolve(res); }); }); return result; }) }; } }], [{ key: 'generateUpdateType', value: function generateUpdateType(model) { var schema = model.schema; var modelName = schema.name; var updateTypeName = [modelName, 'Update'].join('_'); // fetch if exists if (_types2.default.get(updateTypeName)) { return _types2.default.get(updateTypeName); } return _types2.default.generateInputType({ name: updateTypeName, fields: schema.fields }, ['defaultValue']); // sp that defaultValue is filtered out } }]); return DatabaseMutations; }(); exports.default = new DatabaseMutations();