diff --git a/package-lock.json b/package-lock.json index 1e58e31..218c70a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2724,8 +2724,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.2.tgz", "integrity": "sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g==", - "dev": true, - "optional": true + "dev": true }, "boxen": { "version": "4.2.0", @@ -4053,9 +4052,9 @@ }, "dependencies": { "@types/node": { - "version": "12.19.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.15.tgz", - "integrity": "sha512-lowukE3GUI+VSYSu6VcBXl14d61Rp5hA1D+61r16qnwC0lYNSqdxcvRh0pswejorHfS+HgwBasM8jLXz0/aOsw==", + "version": "12.19.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.16.tgz", + "integrity": "sha512-7xHmXm/QJ7cbK2laF+YYD7gb5MggHIIQwqyjin3bpEGiSuvScMQ5JZZXPvRipi1MwckTQbJZROMns/JxdnIL1Q==", "dev": true } } diff --git a/package.json b/package.json index c8612ca..a95f1e0 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "babili-webpack-plugin": "^0.1.2", "concurrently": "^5.3.0", "css-loader": "^5.0.1", - "electron": "^11.2.1", + "electron": "^11.2.2", "electron-devtools-installer": "^3.1.1", "electron-packager": "^15.2.0", "file-loader": "^6.2.0", diff --git a/server/schema.js b/server/schema.js index 3a487ea..3a85d5e 100644 --- a/server/schema.js +++ b/server/schema.js @@ -1,5 +1,6 @@ const graphql = require('graphql'); var cloneDeep = require('lodash.clonedeep'); +const mongoose = require('mongoose'); const { GraphQLObjectType, GraphQLString, @@ -9,105 +10,118 @@ const { GraphQLList, } = graphql; - -const dummyData = - { +const dummyData = { users: { - _id: { - primaryKey: true, - type: "Object", - required: true, - }, - name: { - type: "string", - required: true, - }, - password: { - type: "string", - required: true, - }, - username: { - type: "string", - required: true, - }, + _id: { + primaryKey: true, + type: 'Object', + required: true, + }, + name: { + type: 'string', + required: true, + }, + password: { + type: 'string', + required: true, + }, + username: { + type: 'string', + required: true, + }, + __v: { + type: 'number', + required: true, + }, }, conversations: { - _id: { - primaryKey: true, - type: "string", - required: true, - }, - participants: { - type: "Array", - required: true, - }, - messages: { - type: "Array", - required: true, - }, + _id: { + primaryKey: true, + type: 'string', + required: true, + }, + participants: { + type: 'Array', + required: true, + }, + messages: { + type: 'Array', + required: true, + }, + __v: { + type: 'number', + required: true, + }, }, - } +}; - const capitalize = (s) => { - if (typeof s !== 'string') return '' - return s.charAt(0).toUpperCase() + s.slice(1) -} - let obj = {} +const getGraphQlType = (key, value) => { + switch (true) { + case key.includes('__v'): + break; + case key.includes('_id'): + fieldsObj[key] = { type: GraphQLID }; + break; + case value.type.includes('string'): + fieldsObj[key] = { type: GraphQLString }; + break; + case value.type.includes('Array'): + fieldsObj[key] = { type: new GraphQLList(GraphQLString) }; + break; + case value.type.includes('number'): + fieldsObj[key] = { type: GraphQLInt }; + break; + case value.type.includes('Object'): + fieldsObj[key] = { type: GraphQLObjectType }; + break; + default: + console.log(value, 'Nothing Triggered-----'); + break; + } +}; -let fieldsObj = {} +// Function for capitalization +const capitalize = (s) => { + if (typeof s !== 'string') return ''; + return s.charAt(0).toUpperCase() + s.slice(1); +}; + +// -------- Object Types --------------- +// Storing graphql object types +let obj = {}; +// Storing properties of each mongo db schema +let fieldsObj = {}; +let rootQueryObj = {}; for (const property in dummyData) { - - for (const [key, value] of Object.entries(dummyData[property])) { - fieldsObj[key] = {type: GraphQLString} - } - var deep = cloneDeep(fieldsObj); - console.log(deep === fieldsObj); + for (const [key, value] of Object.entries(dummyData[property])) { + getGraphQlType(key, value); + } + const deep = cloneDeep(fieldsObj); + + // Dynamically creating graphql object types + obj[capitalize(`${property}Type`)] = new GraphQLObjectType({ + name: capitalize(property), + fields: () => deep, + }); - obj[capitalize(`${property}Type`)] = new GraphQLObjectType({ - name: capitalize(property), - fields: () => (deep) - }) - console.log('HEREEEEEEEEEEEEEEEEEEEE',fieldsObj, obj) - fieldsObj = {} + rootQueryObj[property] = { + type: new GraphQLList(obj[capitalize(`${property}Type`)]), + resolve: function resolve(parent, args) { + return _.find({}); + }, + }; + // resetting the fieldsObject + fieldsObj = {}; } +console.log(rootQueryObj); +// -------- Object Types --------------- const RootQuery = new GraphQLObjectType({ name: 'RootQueryType', - fields: { - // entry points into graphql queries - user: { - type: obj.UsersType, - // getting one type of book. tell args that id will be passed in and it will be of type ID. - args: { id: { type: GraphQLID } }, - resolve(parent, args) { - // code to get data from db - // return _.find(books, { id: args.id }); - return _.find({}); - }, - }, - // author: { - // type: AuthorType, - // args: { id: { type: GraphQLID } }, - // resolve(parent, args) { - // return _.find(authors, { id: args.id }); - // }, - // }, - // books: { - // type: new GraphQLList(BookType), - // resolve(parent, args) { - // return books; - // }, - // }, - // authors: { - // type: new GraphQLList(AuthorType), - // resolve(parent, args) { - // return authors; - // }, - // }, - }, + fields: rootQueryObj, }); module.exports = new GraphQLSchema({ - query: RootQuery, -}) \ No newline at end of file + query: RootQuery, +});