From 141fa62022d83c7ba52ff9e39ede6689fb398fba Mon Sep 17 00:00:00 2001 From: Roland Szoke Date: Fri, 20 Sep 2019 16:27:47 +0200 Subject: [PATCH] Task_1_Done --- src/schema.js | 14 ++---- src/schema/comment.js | 27 ++++++------ src/schema/post.js | 100 ++++-------------------------------------- src/schema/user.js | 41 ++++++++--------- 4 files changed, 46 insertions(+), 136 deletions(-) diff --git a/src/schema.js b/src/schema.js index c65e7e8..8a99faf 100644 --- a/src/schema.js +++ b/src/schema.js @@ -20,7 +20,7 @@ const { UserConnection, UserFieldFilter, UserFieldOrder, UserMutations, User, } = require('./schema/user'); const { - PostFieldFilter, PostFieldOrder, Post, PostConnection, PostMutations, + Post, PostMutations, } = require('./schema/post'); const { CommentFieldFilter, CommentFieldOrder, Comment, CommentConnection, @@ -60,16 +60,8 @@ const queryType = new GraphQLObjectType({ }, resolve: (_, args) => resolveQuery({ table: 'users', args }), }, - posts: { - type: PostConnection, - args: { - filters: { type: new GraphQLList(PostFieldFilter) }, - order: { type: PostFieldOrder }, - limit: { type: GraphQLInt }, - offset: { type: GraphQLInt }, - }, - resolve: (_, args) => resolveQuery({ table: 'posts', args }), - }, + // TODO: TASK 2. posts query + // posts: {} comments: { type: CommentConnection, args: { diff --git a/src/schema/comment.js b/src/schema/comment.js index dac3f3b..54fdaa3 100644 --- a/src/schema/comment.js +++ b/src/schema/comment.js @@ -10,7 +10,7 @@ const { get } = require('lodash'); const { resolveQuery } = require('../fetcher'); const { - Node, PageInfo, FilterOperation, OrderDirection, Datetime, + Node, PageInfo, FilterOperation, OrderDirection, } = require('./common'); const CommentArgField = new GraphQLEnumType({ @@ -41,13 +41,14 @@ const CommentFieldOrder = new GraphQLInputObjectType({ }, }); +// TODO: TASK 2. uncomment post when TASK 2. is finished const Comment = new GraphQLObjectType({ name: 'Comment', interfaces: [Node], isTypeOf: (value) => value instanceof Object, fields: () => { const { User } = require('./user'); - const { Post } = require('./post'); + // const { Post } = require('./post'); return { id: { type: GraphQLID }, content: { type: GraphQLString }, @@ -61,17 +62,17 @@ const Comment = new GraphQLObjectType({ return get(resp, 'edges[0].node', {}); }, }, - post: { - type: Post, - resolve: async (parent) => { - const resp = await resolveQuery({ - table: 'posts', - args: { filters: [{ field: 'id', operation: '=', value: parent.post }] }, - }); - return get(resp, 'edges[0].node', {}); - }, - }, - timestamp: { type: Datetime }, + // post: { + // type: Post, + // resolve: async (parent) => { + // const resp = await resolveQuery({ + // table: 'posts', + // args: { filters: [{ field: 'id', operation: '=', value: parent.post }] }, + // }); + // return get(resp, 'edges[0].node', {}); + // }, + // }, + // timestamp: { type: Datetime }, }; }, }); diff --git a/src/schema/post.js b/src/schema/post.js index 6a33f10..b2a69c3 100644 --- a/src/schema/post.js +++ b/src/schema/post.js @@ -2,108 +2,24 @@ const { GraphQLObjectType, GraphQLString, GraphQLID, - GraphQLInt, - GraphQLEnumType, - GraphQLList, GraphQLInputObjectType, GraphQLNonNull, } = require('graphql'); -const { get } = require('lodash'); -const { resolveQuery, createPost } = require('../fetcher'); -const { - Node, PageInfo, FilterOperation, OrderDirection, Datetime, -} = require('./common'); -const { CommentConnection, CommentFieldFilter, CommentFieldOrder } = require('./comment'); - -const PostArgField = new GraphQLEnumType({ - name: 'PostArgField', - values: { - id: { value: 'id' }, - content: { value: 'content' }, - title: { value: 'title' }, - description: { value: 'description' }, - author: { value: 'author' }, - timestamp: { value: 'timestamp' }, - }, -}); - -const PostFieldFilter = new GraphQLInputObjectType({ - name: 'PostFieldFilter', - fields: { - value: { type: GraphQLString }, - field: { type: PostArgField }, - operation: { type: FilterOperation }, - }, -}); - -const PostFieldOrder = new GraphQLInputObjectType({ - name: 'PostFieldOrder', - fields: { - field: { type: PostArgField }, - direction: { type: OrderDirection }, - }, -}); +const { createPost } = require('../fetcher'); +// TODO: TASK 2. Post schemas +const PostArgField = {}; +const PostFieldFilter = {}; +const PostFieldOrder = {}; const Post = new GraphQLObjectType({ name: 'Post', - interfaces: [Node], - isTypeOf: (value) => value instanceof Object, - fields: () => { - const { User } = require('./user'); - return { - id: { type: GraphQLID }, - title: { type: GraphQLString }, - description: { type: GraphQLString }, - content: { type: GraphQLString }, - author: { - type: User, - resolve: async (parent) => { - const resp = await resolveQuery({ - table: 'users', - args: { filters: [{ field: 'email', operation: '=', value: parent.author }] }, - }); - return get(resp, 'edges[0].node', {}); - }, - }, - timestamp: { type: Datetime }, - comments: { - type: CommentConnection, - args: { - filters: { type: new GraphQLList(CommentFieldFilter) }, - order: { type: CommentFieldOrder }, - limit: { type: GraphQLInt }, - offset: { type: GraphQLInt }, - }, - resolve: (parent, args) => resolveQuery({ - table: 'comments', - args: { - ...args, - filters: [ - ...get(args, 'filters', []).filter((filter) => filter.field !== 'post'), - { field: 'post', operation: '=', value: parent.id }, - ], - }, - }), - }, - }; - }, -}); - -const PostEdge = new GraphQLObjectType({ - name: 'PostEdge', - fields: { - node: { type: Post }, - }, -}); - -const PostConnection = new GraphQLObjectType({ - name: 'PostConnection', fields: { - pageInfo: { type: PageInfo }, - edges: { type: new GraphQLList(PostEdge) }, + id: { type: GraphQLID }, }, }); +const PostEdge = {}; +const PostConnection = {}; const CreatePostInput = new GraphQLInputObjectType({ name: 'CreatePostInput', diff --git a/src/schema/user.js b/src/schema/user.js index 3ba4bcb..a3c07d7 100644 --- a/src/schema/user.js +++ b/src/schema/user.js @@ -14,7 +14,7 @@ const { resolveQuery, createUser } = require('../fetcher'); const { Node, PageInfo, FilterOperation, OrderDirection, } = require('./common'); -const { PostConnection, PostFieldFilter, PostFieldOrder } = require('./post'); +// const { PostConnection, PostFieldFilter, PostFieldOrder } = require('./post'); const { CommentConnection, CommentFieldFilter, CommentFieldOrder } = require('./comment'); const UserArgField = new GraphQLEnumType({ @@ -44,6 +44,7 @@ const UserFieldOrder = new GraphQLInputObjectType({ }, }); +// TODO: TASK 2. uncomment posts when TASK 2. is finished const User = new GraphQLObjectType({ name: 'User', interfaces: [Node], @@ -53,25 +54,25 @@ const User = new GraphQLObjectType({ name: { type: GraphQLString }, username: { type: GraphQLString }, email: { type: GraphQLString }, - posts: { - type: PostConnection, - args: { - filters: { type: new GraphQLList(PostFieldFilter) }, - order: { type: PostFieldOrder }, - limit: { type: GraphQLInt }, - offset: { type: GraphQLInt }, - }, - resolve: (parent, args) => resolveQuery({ - table: 'posts', - args: { - ...args, - filters: [ - ...get(args, 'filters', []).filter((filter) => filter.field !== 'author'), - { field: 'author', operation: '=', value: parent.email }, - ], - }, - }), - }, + // posts: { + // type: PostConnection, + // args: { + // filters: { type: new GraphQLList(PostFieldFilter) }, + // order: { type: PostFieldOrder }, + // limit: { type: GraphQLInt }, + // offset: { type: GraphQLInt }, + // }, + // resolve: (parent, args) => resolveQuery({ + // table: 'posts', + // args: { + // ...args, + // filters: [ + // ...get(args, 'filters', []).filter((filter) => filter.field !== 'author'), + // { field: 'author', operation: '=', value: parent.email }, + // ], + // }, + // }), + // }, comments: { type: CommentConnection, args: {