From c8c5063f8f354c28b344860c16c07233d003d112 Mon Sep 17 00:00:00 2001 From: Sergey Yarkov Date: Tue, 3 Mar 2020 21:40:33 +0300 Subject: [PATCH] :recycle: graphql file structure to role-oriented --- graphql/data/index.js | 11 ++++++++++ graphql/models/Article.js | 11 ++++++++++ graphql/models/index.js | 5 +++++ graphql/resolvers/articlesResolvers.js | 11 ++++++++++ graphql/resolvers/index.js | 7 +++++++ graphql/typeDefs/index.js | 8 +++++++ graphql/typeDefs/query.js | 11 ++++++++++ graphql/typeDefs/types/articleType.js | 12 +++++++++++ graphql/typeDefs/types/index.js | 5 +++++ next.config.js | 14 ++++++------- pages/api/graphql.js | 29 +++----------------------- 11 files changed, 91 insertions(+), 33 deletions(-) create mode 100644 graphql/data/index.js create mode 100644 graphql/models/Article.js create mode 100644 graphql/models/index.js create mode 100644 graphql/resolvers/articlesResolvers.js create mode 100644 graphql/resolvers/index.js create mode 100644 graphql/typeDefs/index.js create mode 100644 graphql/typeDefs/query.js create mode 100644 graphql/typeDefs/types/articleType.js create mode 100644 graphql/typeDefs/types/index.js diff --git a/graphql/data/index.js b/graphql/data/index.js new file mode 100644 index 0000000..7e2241f --- /dev/null +++ b/graphql/data/index.js @@ -0,0 +1,11 @@ +const articles = [ + { id: 1, title: 'Article 1' }, + { id: 2, title: 'Article 2' }, + { id: 3, title: 'Article 3' }, + { id: 4, title: 'Article 4' }, + { id: 5, title: 'Article 5' } +] + +module.exports = { + articles +} diff --git a/graphql/models/Article.js b/graphql/models/Article.js new file mode 100644 index 0000000..de87c54 --- /dev/null +++ b/graphql/models/Article.js @@ -0,0 +1,11 @@ +const { articles } = require('../data') + +class Article { + static all () { + return articles + } +} + +module.exports = { + Article +} diff --git a/graphql/models/index.js b/graphql/models/index.js new file mode 100644 index 0000000..68934a8 --- /dev/null +++ b/graphql/models/index.js @@ -0,0 +1,5 @@ +const { Article } = require('./Article') + +module.exports = { + Article +} diff --git a/graphql/resolvers/articlesResolvers.js b/graphql/resolvers/articlesResolvers.js new file mode 100644 index 0000000..3f531c6 --- /dev/null +++ b/graphql/resolvers/articlesResolvers.js @@ -0,0 +1,11 @@ +const { Article } = require('../models') + +const articlesResolvers = { + Query: { + articles: () => Article.all() + } +} + +module.exports = { + articlesResolvers +} diff --git a/graphql/resolvers/index.js b/graphql/resolvers/index.js new file mode 100644 index 0000000..c5d8135 --- /dev/null +++ b/graphql/resolvers/index.js @@ -0,0 +1,7 @@ +const { articlesResolvers } = require('./articlesResolvers') + +const resolvers = [articlesResolvers] + +module.exports = { + resolvers +} diff --git a/graphql/typeDefs/index.js b/graphql/typeDefs/index.js new file mode 100644 index 0000000..4aaf7ac --- /dev/null +++ b/graphql/typeDefs/index.js @@ -0,0 +1,8 @@ +const { query } = require('./query') +const { articleType } = require('./types') + +const typeDefs = [query, articleType] + +module.exports = { + typeDefs +} diff --git a/graphql/typeDefs/query.js b/graphql/typeDefs/query.js new file mode 100644 index 0000000..d7e49c4 --- /dev/null +++ b/graphql/typeDefs/query.js @@ -0,0 +1,11 @@ +const { gql } = require('apollo-boost') + +const query = gql` + type Query { + articles: [Article] + } +` + +module.exports = { + query +} diff --git a/graphql/typeDefs/types/articleType.js b/graphql/typeDefs/types/articleType.js new file mode 100644 index 0000000..d8643cc --- /dev/null +++ b/graphql/typeDefs/types/articleType.js @@ -0,0 +1,12 @@ +const { gql } = require('apollo-boost') + +const articleType = gql` + type Article { + id: ID + title: String + } +` + +module.exports = { + articleType +} diff --git a/graphql/typeDefs/types/index.js b/graphql/typeDefs/types/index.js new file mode 100644 index 0000000..a45a45f --- /dev/null +++ b/graphql/typeDefs/types/index.js @@ -0,0 +1,5 @@ +const { articleType } = require('./articleType') + +module.exports = { + articleType +} diff --git a/next.config.js b/next.config.js index 7a5cb73..d6ef8db 100644 --- a/next.config.js +++ b/next.config.js @@ -2,12 +2,12 @@ const withSass = require('@zeit/next-sass') const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin') module.exports = withSass({ - cssModules: true, - webpack: (config, { dev, isServer }) => { - if (isServer) return config + cssModules: true, + webpack: (config, { dev, isServer }) => { + if (isServer) return config - config.optimization.minimizer.push(new OptimizeCSSAssetsPlugin({})) + config.optimization.minimizer.push(new OptimizeCSSAssetsPlugin({})) - return config - } -}) \ No newline at end of file + return config + } +}) diff --git a/pages/api/graphql.js b/pages/api/graphql.js index c6f7375..adf10a3 100644 --- a/pages/api/graphql.js +++ b/pages/api/graphql.js @@ -1,29 +1,6 @@ -import { gql, ApolloServer } from 'apollo-server-micro' - -const Articles = [ - { id: 1, title: 'Article 1' }, - { id: 2, title: 'Article 2' }, - { id: 3, title: 'Article 3' }, - { id: 4, title: 'Article 4' }, - { id: 5, title: 'Article 5' } -] - -const typeDefs = gql` - type Query { - articles: [Article] - } - - type Article { - id: ID - title: String - } -` - -const resolvers = { - Query: { - articles: (_parent, _args, _context) => Articles - } -} +const { ApolloServer, gql } = require('apollo-server-micro') +const { typeDefs } = require('../../graphql/typeDefs') +const { resolvers } = require('../../graphql/resolvers') const apolloServer = new ApolloServer({ typeDefs, resolvers }) const handler = apolloServer.createHandler({ path: '/api/graphql' })