Skip to content

Commit

Permalink
Task_1_Done
Browse files Browse the repository at this point in the history
  • Loading branch information
rolandszoke committed Sep 20, 2019
1 parent eb610de commit 141fa62
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 136 deletions.
14 changes: 3 additions & 11 deletions src/schema.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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: {
Expand Down
27 changes: 14 additions & 13 deletions src/schema/comment.js
Original file line number Diff line number Diff line change
Expand Up @@ -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({
Expand Down Expand Up @@ -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 },
Expand All @@ -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 },
};
},
});
Expand Down
100 changes: 8 additions & 92 deletions src/schema/post.js
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
41 changes: 21 additions & 20 deletions src/schema/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -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({
Expand Down Expand Up @@ -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],
Expand All @@ -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: {
Expand Down

0 comments on commit 141fa62

Please sign in to comment.